简易版三子棋
三子棋原理比较简单,类似于我们常玩的五子棋,但是只要三个相同符号连在一起就可以获得胜利,由于只有9个位置,所以先手下的人有很大机率获得胜利,下面的代码就是以自己先手和电脑进行下三子棋,由于比较简易嘛,电脑就采用的是随机数的方式进行下棋,代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include <windows.h>
//完成三子棋游戏代码
void init(char arry[][3], int x, int y)//初始化
{
for (int i = 0; i < x; i++){
for (int j = 0; j < y; j++){
arry[i][j] = ' ';
}
}
}
void face(char arry[][3], int x, int y)//显示函数
{
system("cls");
system("title 人工智障三子棋");
system("mode con cols=32 lines=12");//cols页面长度,lines页面高度
printf(" | 1 | 2 | 3\n");
for (int i = 0; i < x; i++){
printf("--------------\n");
printf("%d | %c | %c | %c\n", i + 1, arry[i][0], arry[i][1], arry[i][2]);
}
}
int poslegal(char arry[][3], int x, int y)//坐标是否合法
{
if (x>2 || x<0 || y>2 || y < 0){
printf("您输入的位置不合法!\n");
return 0;
}
if (arry[x][y] != ' '){
printf("您输入的位置已经被占用了!\n");
return 0;
}
return 1;
}
void computer(char arry[][3], int x, int y)//电脑下
{
while (1) {
int i = rand() % 3;//随机数模三
int j = rand() % 3;
if (arry[i][j] == ' ') {//有空格直接下棋,否则一直循环
arry[i][j] = 'O';
break;
}
}
}
char is_win(char arry[][3], int x, int y)//用字符判断输赢
{
for (int i = 0; i < x; i++){//判断某一行是否连成一条线,并且里面的值不能是空
if (arry[i][0] == arry[i][1] && arry[i][0] == arry[i][2]&&(arry[i][0]=='X'||arry[i][0]=='O'))
return arry[i][0];
}
for (int i = 0; i < x; i++){//判断某一列是否连成一条线,并且里面的值不能是空
if (arry[0][i] == arry[1][i] && arry[0][i] == arry[2][i] && (arry[0][i] == 'X' || arry[0][i] == 'O'))
return arry[0][i];
}
if (arry[0][0] == arry[1][1] && arry[0][0] == arry[2][2] && (arry[1][1] == 'X' || arry[1][1] == 'O'))
return arry[1][1];//判断正斜杠方向,并且里面的值不能是空
if (arry[0][y - 1] == arry[1][1] && arry[1][1] == arry[x - 1][0] && (arry[1][1] == 'X' || arry[1][1] == 'O'))
return arry[1][1];//判断反斜杠方向,并且里面的值不能是空
return 'N';
}
int result(char arry[][3], int x, int y, int *count)//用is_win函数的结果来判断比赛结果输出
{
(*count)--;
char ch = is_win(arry, x, y);
switch (ch){
case 'X':
printf("你赢了,真棒~~\n");
break;
case 'O':
printf("你输了,真菜~~\n");
break;
case 'N':
if (*count == 0) {
printf("棋逢对手~你的智商和电脑是一样的~\n");
break;
}
return 1;//还有位置返回1
}
return 0;//结束break,都返回的是0
}
void main()
{
char arry[3][3];
init(arry, 3, 3);
int count = 9;//每走一步--
while (1){
face(arry, 3, 3);
printf("请输入你要指定的位置坐标:");
int x, y;
scanf("%d %d", &x, &y);
if (!poslegal(arry, x - 1, y - 1)){
continue;
}
arry[x - 1][y - 1] = 'X';//自己下完之后判断输赢
if (result(arry, 3, 3, &count) == 0) {
break;
}
face(arry, 3, 3);
Sleep(1000);
computer(arry, 3, 3);
face(arry, 3, 3);
if (result(arry, 3, 3, &count) == 0) {//电脑下完之后判断输赢
break;
}
}
}
代码注释的也比较详细,主要用于个人学习,望大佬们多多指点,共同进步嘛。