Игра крестики-нолики (Отобразить)
CODE:
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowTextA", "SetWindowTextA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 180, 250, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int b[9]; //кнопки
int move=0; //счетчик хода
string m[9]={"-","-","-","-","-","-","-","-","-"}; //текст кнопок
b[0]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 10, 50, 50, formatwi(w), 0, 0, 0);
b[1]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 10, 50, 50, formatwi(w), 0, 0, 0);
b[2]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 10, 50, 50, formatwi(w), 0, 0, 0);
b[3]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 60, 50, 50, formatwi(w), 0, 0, 0);
b[4]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 60, 50, 50, formatwi(w), 0, 0, 0);
b[5]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 60, 50, 50, formatwi(w), 0, 0, 0);
b[6]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 110, 50, 50, formatwi(w), 0, 0, 0);
b[7]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 110, 50, 50, formatwi(w), 0, 0, 0);
b[8]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 110, 50, 50, formatwi(w), 0, 0, 0);
pc_move();
loop()
{
sleep(10);
rename("Ход №"+format(move));
}
function check_win()
{
for(int i = 0; i < 3; i++) //Для победы нужны 3 клеточки
{
if (m[i*3] == m[i*3+1] && m[i*3+1] == m[i*3+2]) return m[i];//Комбинации для победы вычисляются по формулам
if (m[i] == m[i+3] && m[i+3] == m[i+6]) return m[i];//Вертикальная
if ((m[2] == m[4] && m[4] == m[6]) || (m[0] == m[4] && m[4] == m[8])) return m[i];//наискось
}
return '-'; //Иначе - ничья
}
function result()
{
if(check_win()=='O') {messagebox("Вы выиграли"); goto global st;}
if(check_win()=='X') {messagebox("Вы проиграли"); goto global st;}
if(move>8 && check_win()=='-') {messagebox("Ничья"); goto global st;}
}
function pc_move()
{
int r;
loop()
{
r=rand(0, 9);
if(m[r]=="-") break;
}
move++;
m[r]="X";
SetWindowTextA(b[r], "X");
result();
}
function getmessage(0, WM_COMMAND)
{
for(int k=0; k<9; k++)
{
if(message.lparam==b[k])
{
if(m[k]=="X" || m[k]=="O") break;
m[k]="O";
while(getkeystate(1)) sleep(10);
move++;
SetWindowTextA(b[k], "O");
//pause(500); //можно поставить
result();
pc_move();
}
}
}
st:;
external(INT, "SetWindowTextA", "SetWindowTextA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 180, 250, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int b[9]; //кнопки
int move=0; //счетчик хода
string m[9]={"-","-","-","-","-","-","-","-","-"}; //текст кнопок
b[0]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 10, 50, 50, formatwi(w), 0, 0, 0);
b[1]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 10, 50, 50, formatwi(w), 0, 0, 0);
b[2]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 10, 50, 50, formatwi(w), 0, 0, 0);
b[3]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 60, 50, 50, formatwi(w), 0, 0, 0);
b[4]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 60, 50, 50, formatwi(w), 0, 0, 0);
b[5]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 60, 50, 50, formatwi(w), 0, 0, 0);
b[6]=CreateWindow(0, "BUTTON", "-", 1342177280, 10, 110, 50, 50, formatwi(w), 0, 0, 0);
b[7]=CreateWindow(0, "BUTTON", "-", 1342177280, 60, 110, 50, 50, formatwi(w), 0, 0, 0);
b[8]=CreateWindow(0, "BUTTON", "-", 1342177280, 110, 110, 50, 50, formatwi(w), 0, 0, 0);
pc_move();
loop()
{
sleep(10);
rename("Ход №"+format(move));
}
function check_win()
{
for(int i = 0; i < 3; i++) //Для победы нужны 3 клеточки
{
if (m[i*3] == m[i*3+1] && m[i*3+1] == m[i*3+2]) return m[i];//Комбинации для победы вычисляются по формулам
if (m[i] == m[i+3] && m[i+3] == m[i+6]) return m[i];//Вертикальная
if ((m[2] == m[4] && m[4] == m[6]) || (m[0] == m[4] && m[4] == m[8])) return m[i];//наискось
}
return '-'; //Иначе - ничья
}
function result()
{
if(check_win()=='O') {messagebox("Вы выиграли"); goto global st;}
if(check_win()=='X') {messagebox("Вы проиграли"); goto global st;}
if(move>8 && check_win()=='-') {messagebox("Ничья"); goto global st;}
}
function pc_move()
{
int r;
loop()
{
r=rand(0, 9);
if(m[r]=="-") break;
}
move++;
m[r]="X";
SetWindowTextA(b[r], "X");
result();
}
function getmessage(0, WM_COMMAND)
{
for(int k=0; k<9; k++)
{
if(message.lparam==b[k])
{
if(m[k]=="X" || m[k]=="O") break;
m[k]="O";
while(getkeystate(1)) sleep(10);
move++;
SetWindowTextA(b[k], "O");
//pause(500); //можно поставить
result();
pc_move();
}
}
}
st:;
Иногда багает, если играть несколько раз подряд.
Можно сломать, если тыкать быстро ко клеткам.
Чтобы исправить - надо ловить нажатие по клеткам чуть иначе.