此代码需要EasyX图形库 EasyX下载地址
界面绘制:
void menu()
{
int y = HIGH / 3;
int x = WIDE / 3;
setlinecolor(BLACK);
fillrectangle(0, y, WIDE, y + 1);
fillrectangle(0, y + y, WIDE, y + y - 1);
fillrectangle(x, 0, x + 1, HIGH);
fillrectangle(x + x, 0, x + x + 1, HIGH);
}
判断胜利条件:
int judge()
{
int p = 0;
int t = 0;
int count = 0, count1 = 0;
int sum = 0, sum1 = 0;
for (int x = 0;x < 3;x++) {
if (map[x][0] == 1) {
if (map[x][1] == 1) {
if (map[x][2] == 1) {
p = 1;
}
}
}
else if (map[x][0] == 2) {
if (map[x][1] == 2)
if (map[x][2] == 2)
t = 1;
}
}
for (int x = 0;x < 3;x++) {
if (map[0][x] == 1) {
if (map[1][x] == 1)
if (map[2][x] == 1)
p = 1;
}
else if (map[0][x] == 2) {
if (map[1][x] == 2)
if (map[2][x] == 2)
t = 1;
}
}
for (int x = 0;x < 3;x++) {
if (map[x][x] == 1) {
count++;
}
else if (map[x][x] == 2) {
sum++;
}
}
for (int x = 0, y = 2;x < 3;x++, y--) {
if (map[x][y] == 1)
count1++;
if (map[x][y] == 2)
sum1++;
}
if (count == 3||count1==3)
p = 1;
else if (sum == 3||sum1==3)
t = 1;
if (p == 1)
MessageBox(0, _T("方块赢 按两下空格重来"), _T("hello"), 0);
else if (t == 1)
MessageBox(0, _T("圆赢 按两下空格重来"), _T("hello"), 0);
if (p == 1 || t == 1) return 1;
return 0;
}
根据鼠标点击绘制图案(写的很粗暴):
void Draw(MOUSEMSG m,bool keydown)
{
int mx = WIDE / 3;
int my = HIGH / 3;
int interval = WIDE / 12;
if (key % 2 == 0) {
setfillcolor(GREEN);
}
else {
setfillcolor(BLUE);
}
if (keydown) {
if (m.x < mx) {
if (m.y < my) {
if (key % 2 == 0 && a != 1) {
solidcircle(mx / 2, my / 2, 50);
map[0][0] = 2;
a = 1;
key++;
}
else if (a != 1) {
fillrectangle(interval, 10, interval + interval, 130);
map[0][0] = 1;
a = 1;
key++;
}
}
else if (m.y > my && m.y < my + my) {
if (key % 2 == 0 && d != 1) {
solidcircle(mx / 2, HIGH / 2, 50);
map[1][0] = 2;
d = 1;
key++;
}
else if (d != 1) {
fillrectangle(interval, my + 10, interval + interval, my + 130);
map[1][0] = 1;
d = 1;
key++;
}
}
else if (m.y > my + my) {
if (key % 2 == 0 && g != 1) {
solidcircle(mx / 2, my + my + my / 2, 50);
map[2][0] = 2;
g = 1;
key++;
}
else if (g != 1) {
fillrectangle(interval, my + 10 + my, interval + interval, my + my + 130);
map[2][0] = 1;
g = 1;
key++;
}
}
}
else if (m.x > mx && m.x < mx + mx) {
if (m.y < my) {
if (key % 2 == 0 && b != 1) {
solidcircle(WIDE / 2, my / 2, 50);
map[0][1] = 2;
b = 1;
key++;
}
else if (b != 1) {
fillrectangle(interval+mx, 10, mx+interval + interval, 130);
map[0][1] = 1;
b = 1;
key++;
}
}
else if (m.y > my && m.y < my + my) {
if (key % 2 == 0 && e != 1) {
solidcircle(WIDE / 2, HIGH / 2, 50);
map[1][1] = 2;
e = 1;
key++;
}
else if (e != 1) {
fillrectangle(mx+interval, my + 10, mx+interval + interval, my + 130);
map[1][1] = 1;
e = 1;
key++;
}
}
else if (m.y > my + my) {
if (key % 2 == 0 && h != 1) {
solidcircle(WIDE / 2, my + my + my / 2, 50);
map[2][1] = 2;
h = 1;
key++;
}
else if (h != 1) {
fillrectangle(interval+mx, my + 10 + my, mx+interval + interval, my + my + 130);
map[2][1] = 1;
h = 1;
key++;
}
}
}
else if (m.x > mx + mx) {
if (m.y < my) {
if (key % 2 == 0 && c != 1) {
solidcircle(mx / 2+mx+mx, my / 2, 50);
map[0][2] = 2;
c = 1;
key++;
}
else if (c != 1) {
fillrectangle(interval + mx+mx, 10, mx+mx + interval + interval, 130);
map[0][2] = 1;
c = 1;
key++;
}
}
else if (m.y > my && m.y < my + my) {
if (key % 2 == 0 && f != 1) {
solidcircle(mx / 2 + mx + mx, HIGH / 2, 50);
map[1][2] = 2;
f = 1;
key++;
}
else if (f != 1) {
fillrectangle(mx + interval+mx, my + 10, mx+mx + interval + interval, my + 130);
map[1][2] = 1;
f = 1;
key++;
}
}
else if (m.y > my + my) {
if (key % 2 == 0 && i != 1) {
solidcircle(mx / 2 + mx + mx, my + my + my / 2, 50);
map[2][2] = 2;
i = 1;
key++;
}
else if (i != 1) {
fillrectangle(interval + mx+mx, my + 10 + my, mx+mx + interval + interval, my + my + 130);
map[2][2] = 1;
i = 1;
key++;
}
}
}
}
}
最后的拼接:
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <windows.h>
constexpr auto WIDE = 640;
constexpr auto HIGH = 480;
int key = 1;
int a=0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;
int map[3][3];
void menu();
void Draw(MOUSEMSG m,bool keydown);
int judge();
int main()
{
MOUSEMSG m;
bool keydown = false;
int crux = 0;
initgraph(WIDE, HIGH);
setbkcolor(WHITE);
clearcliprgn();
menu();
for (int x = 0;x < 3;x++) {
for (int y = 0;y < 3;y++) {
map[x][y] = 0;
}
}
while (1) {
m = GetMouseMsg();
switch (m.uMsg) {
case WM_LBUTTONDOWN:
keydown = true;
break;
case WM_LBUTTONUP:
keydown = false;
break;
}
Draw(m, keydown);
crux = judge();
if (_kbhit()||crux==1) {
char word;
word = _getch();
if (word == ' '||crux==1) {
a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0;
clearcliprgn();
menu();
key = 1;
for (int x = 0;x < 3;x++) {
for (int y = 0;y < 3;y++) {
map[x][y] = 0;
}
}
crux = 0;
}
}
}
system("pause");
return 0;
}
|