纯新人,简单实现了一下井字棋,过程还是挺曲折的。如果有更好的方法,请多指教。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void start();//地图绘制
void player1();//玩家1控制
void player2();//玩家2控制
int gamecontroler();
int map[5][5] =
{
{ 10,1,11,1,12 },
{ 2,3,2,3,2 },
{ 16,1,17,1,18 },
{ 2,3,2,3,2 },
{ 19,1,20,1,21 },
};
int x, y;
int game=0;
char input;
int round=1;
int main()
{
while (1)
{
system("cls");
start();
if (game > 0)
{
break;
}
while (1)
{
if (round == 1)
{
player1();
round = 2;
break;
}
if (round == 2)
{
player2();
round = 1;
break;
} //控制异步输入
}
game=gamecontroler();
}
if (game == 1)
printf("使用O的玩家胜利了\n");
if (game == 2)
printf("使用X的玩家胜利了\n");
if (game == 3)
printf("平局了,淦!\n");
return 0;
}
void start()
{
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
switch (map[i][j])
{
case 1:
printf("|");
break;
case 2:
printf("-");
break;
case 3:
printf("+");
break;
case 4:
printf("O");
break;
case 5:
printf("X");
break;
default:
printf(" ");
break;
}
}
printf("\n");
}
printf("\n以从左到右,从下到上的顺序将格子编号为1-9(即与小键盘位置对应),输入对应编号以在所在格放置棋子,O先走\n");
}
void player1()
{
int con = 1; //控制输入是否正确
while(con)
{
input = getch();
switch (input)
{
case '7':
if (map[0][0] >= 10)
{
map[0][0] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '8':if (map[0][2] >= 10)
{
map[0][2] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '9':if (map[0][4] >= 10)
{
map[0][4] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '4':if (map[2][0] >= 10)
{
map[2][0] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '5':if (map[2][2] >= 10)
{
map[2][2] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '6':if (map[2][4] >= 10)
{
map[2][4] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '1':if (map[4][0] >= 10)
{
map[4][0] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '2':if (map[4][2] >= 10)
{
map[4][2] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '3':if (map[4][4] >= 10)
{
map[4][4] = 4; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
default:printf("请按规则输入\n");
break;
}
con--;
}
}
void player2()
{
int con = 1; //控制输入是否正确
while (con)
{
input = getch();
switch (input)
{
case '7':
if (map[0][0] >= 10)
{
map[0][0] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '8':if (map[0][2] >= 10)
{
map[0][2] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '9':if (map[0][4] >= 10)
{
map[0][4] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '4':if (map[2][0] >= 10)
{
map[2][0] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '5':if (map[2][2] >= 10)
{
map[2][2] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '6':if (map[2][4] >= 10)
{
map[2][4] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '1':if (map[4][0] >= 10)
{
map[4][0] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '2':if (map[4][2] >= 10)
{
map[4][2] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
case '3':if (map[4][4] >= 10)
{
map[4][4] = 5; break;
}
else
{
printf("该位置已经有棋子了"); con++; input = 0; break;
}
default:printf("请按规则输入\n");
break;
}
con--;
}
}
int gamecontroler()
{
int i, j;
switch (input)
{
case '1':i = 4, j = 0; break;
case '2':i = 4, j = 2; break;
case '3':i = 4, j = 4; break;
case '4':i = 2, j = 0; break;
case '5':i = 2, j = 2; break;
case '6':i = 2, j = 4; break;
case '7':i = 0, j = 0; break;
case '8':i = 0, j = 2; break;
case '9':i = 0, j = 4; break;
}
if ((map[0][0] == map[0][2] && map[0][2] == map[0][4]) || (map[2][0] == map[2][2] && map[2][2] == map[2][4]) || (map[4][0] == map[4][2] && map[4][2] == map[4][4]) ||
(map[0][0] == map[2][0] && map[2][0] == map[4][0]) || (map[0][2] == map[2][2] && map[2][2] == map[4][2]) || (map[0][4] == map[2][4] && map[2][4] == map[4][4]) ||
(map[0][0] == map[2][2] && map[2][2] == map[4][4]) || (map[0][4] == map[2][2] && map[2][2] == map[4][0]))
{
if (map[i][j] == 4)
{
return 1;
}
if (map[i][j] == 5)
{
return 2;
}
}
else if ((map[2][2] < 10) && (map[0][2] < 10) && (map[4][2] < 10) && (map[2][0] < 10) && (map[2][4] < 10) && (map[4][4] < 10) && (map[4][0] < 10) && (map[0][0] < 10) && (map[0][4] < 10))
{
return 3;
}
else return 0;
}