用二维数组实现简单三子棋游戏
用二维数组实现简单三子棋游戏 环境(vs2013)
#define _CRT_SECURE_NO_WARNINGS
#define Hang 3
#define Lie 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()//菜单
{
printf("=======================================
");
printf("=-------------1 进行游戏--------------=
");
printf("=-------------0 退出游戏--------------=
");
printf("=======================================
");
}
Qipan2(int a,int b)//初始话棋盘格子
{
for (int i = 0; i < Hang; i++)
{
printf("---");
if (i < Hang - 1)printf("|");
}
printf("
");
}
void Qipan1(char a[Hang][Lie], int h, int l)//初始化棋盘并使得二维数组数值为:空格
{
for (int i = 0; i < Hang; i++)
{
for (int j = 0; j < Lie; j++)
{
a[i][j] = ;
printf(" %c ",a[i][j]);
if (j < Lie - 1)printf("|");
}
printf("
");
if(i<Hang-1)Qipan2(Hang, Lie);
}
}
void Qipan3(char a[Hang][Lie], int h, int l)//下棋后显示棋盘与棋子
{
for (int i = 0; i < Hang; i++)
{
for (int j = 0; j < Lie; j++)
{
printf(" %c ", a[i][j]);
if (j < Lie - 1)printf("|");
}
printf("
");
if (i<Hang - 1)Qipan2(Hang, Lie);
}
}
void Computer(char a[Hang][Lie], int h, int l)//电脑落棋(生成随机数坐标)
{
int x, y;
while (1)
{
x = rand() % h;
y = rand() % l;
if (x >= 0 && x<Hang&&y>=0 && y < Lie)
{
if (a[x][y]== )
{
a[x][y] = O; Qipan3(a, h, l);
break;
}
}
}
}
int Pk1(char a[Hang][Lie], int h, int l)//判断是否为平局
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < l;j++)
if (a[i][j] == )return 0;
}
return 1;
}
char Pk(char a[Hang][Lie], int h, int l)//判断输赢以及平局和未下完返回对应字符
{
for (int i = 0; i < h; i++)
{
if (a[i][0] == a[i][1] && a[i][1] == a[i][2] && a[i][0] != )
{
return a[i][0];
}
if (a[0][i] == a[1][i] && a[1][i] == a[2][i] && a[0][i] != )
{
return a[0][i];
}
}
if (a[0][0] == a[1][1] && a[1][1] == a[2][2] && a[1][1] != )
{
return a[0][0];
}
if (a[0][2] == a[1][1] && a[1][1] == a[2][1] && a[1][1] != )
{
return a[0][2];
}
if (Pk1(a, h, l) == 1)
{
return p;
}
return ;
}
void Myself(char a[Hang][Lie], int h, int l)//玩家落棋后电脑落棋并判断输赢
{
int x, y;
char m = ;
while (1)
{
while (1)
{
printf("请输入要落棋的坐标:
");
scanf("%d%d", &x, &y);
if (x > 0 && x <= Hang&&y > 0 && y <= Lie&&a[x-1][y-1] == )
{
a[x-1][y-1] = X;
Qipan3(a, h, l);
break;
}
else
{
printf("输入的坐标不合法,请重新输入!
");
Qipan3(a, h, l);
}
}
m = Pk(a, h, l);
printf("
");
if (m != )break;
Computer(a, Hang, Lie);
m = Pk(a, h, l);
if (m != )break;
}
if (m == X)
{
printf("恭喜你赢了!
");
return;
}
if (m == O)
{
printf("电脑赢了!
");
return;
}
if (m == P)
{
printf("平局!
");
return;
}
}
void Qipan()//创建二维数组并调用函数
{
char a[Hang][Lie];
Qipan1(a, Hang, Lie);
Myself(a, Hang, Lie);
}
void playgame()//开始选择菜单并调用游戏函数
{
int s;
do
{
menu();
printf("请输入你的操作:
");
scanf("%d", &s);
switch (s)
{
case 1:
{
Qipan();
break;
}
case 0:
{
printf("退出游戏成功!
");
break;
}
default:
{
printf("输入有误!请重新输入。
");
break;
}
}
} while (s!=0);
}
void main()
{
srand((unsigned)time(NULL));
playgame();
}
下一篇:
设计模式解析:适配器模式
