三子棋的进阶玩法
Posted 流浪孤儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三子棋的进阶玩法相关的知识,希望对你有一定的参考价值。
五子棋
九子棋!
//本程序可以实现3到9字棋的游戏功能比如5字棋,连着的五个棋子便算赢
//首先建立一个工程,工程包含这三个文件
//
//text.c文件中
#include"game.h"
//测试游戏的逻辑
int main()
{
srand((unsigned int) time(NULL));
int input = 1;
do
{
menu();
printf("输入1进入游戏或者输入0退出游戏\\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
break;
}
} while (input);
return 0;
}
//game.c文件中
#include"game.h"
void menu()
{
printf(".............................................\\n");
printf("............1 : Play........................\\n");
printf("............0 : Exit........................\\n");
printf(".............................................\\n");
}
void player(char arr[][WIDE], int len, int wide)
{
int x = -1;
int y = -1;
do
{
printf("请输入你要下子的坐标如11Enter键:\\n");
scanf("%d", &x);//优化输入
//清除缓冲区
char tmp = 0;
while (tmp != '\\n')
{
tmp = getchar();
}
y = x % 10;
x = x / 10;
if (x > len || x < 1 || y > len || y < 1)
{
printf("坐标输入错误请重新输入:\\n");
}
if (arr[x-1][y-1] != ' ')
{
printf("不可以毁棋!!!请重新输入:");
}
} while (x > len || x < 1 || y > len || y < 1|| arr[x-1][y-1] != ' ');
arr[x - 1][y - 1] = '*';
printf("玩家落子:\\n");
initboard(arr, LENGTH, WIDE);
}
void computer(char arr[][WIDE], int len, int wide)
{
int x = -1;
int y = -1;
while (1)
{
x = rand() % len;
y = rand() % wide;
if (arr[x][y] == ' ')
{
arr[x][y] = 'X';
break;
}
}
printf("电脑落子:\\n");
initboard(arr, LENGTH, WIDE);
}
char textwin(char arr[][WIDE], int len, int wide)
{
int i = 0;
int j = 0;
for (i = 0; i < len; i++)
{
j = 0;
while (j+1 < wide)
{
if ((arr[i][j] == arr[i][j + 1]) && (arr[i][0] != ' '))
{
j++;
}
else
break;
}
if (j == wide - 1)return arr[i][0];
}
for ( j= 0; j< wide; j++)
{
i = 0;
while (i + 1 < len)
{
if ((arr[i][j] == arr[i+1][j]) && (arr[0][j] != ' '))
{
i++;
}
else
break;
}
if (i == len - 1)return arr[0][j];
}
for (i = 0; i+1 < len; )
{
if ((arr[i][i] == arr[i+1][i + 1]) && (arr[0][0] != ' '))
{
i++;
}
else
break;
}
if (i + 1 == len)return arr[0][0];
for (j = 0; j + 1 < wide; )
{
if ((arr[wide-1-j][j] == arr[wide - 1 - j -1][j + 1]) &&( arr[0][wide-1] != ' '))
{
j++;
}
else
break;
}
if (j + 1 == wide)return arr[0][wide-1];
for (i = 0; i < len; i++)
{
for (j = 0; j < wide; j++)
{
if (arr[i][j] == ' ')return 'c';
}
}
return 'o';
}
void initarr(char arr[][WIDE], int len, int wide)
{
int i = 0;
int j = 0;
//初始化数组
for (i = 0; i < len; i++)
{
for (j = 0; j < wide; j++)
{
arr[i][j] = ' ';
}
}
}
void initboard(char arr[LENGTH][WIDE], int len,int wide)
{
int i = 0;
int j = 0;
//初始化棋盘
for (i = 0; i <len; i++)
{
for (j = 0; j < wide; j++)
{
if (j == wide - 1)
{
printf(" %c ",arr[i][j]);
}
else
{
printf(" %c |",arr[i][j]);
}
}
printf("\\n");
if (i != len - 1)
{
for (j = 0; j < wide; j++)
{
if (j != wide - 1)
{
printf("---|");
}
else
printf("---");
}
}
printf("\\n");
}
}
int result(char arr[LENGTH][WIDE], int len, int wide)
{
if (textwin(arr, LENGTH, WIDE) == '*')
{
printf("恭喜你赢了!");
}
else if (textwin(arr, LENGTH, WIDE) == 'X')
{
printf("很遗憾你输了了!");
}
else if (textwin(arr, LENGTH, WIDE) == 'o')
{
printf("这局为平局!");
}
else
return 1;
return 0;
}
void game()
{
char arr[LENGTH][WIDE] = { 0 };
initarr(arr, LENGTH, WIDE);
initboard(arr, LENGTH, WIDE);
while (1)
{
player(arr,LENGTH,WIDE);
if (result(arr, LENGTH, WIDE) == 0)break;
computer(arr, LENGTH, WIDE);
if (result(arr, LENGTH, WIDE) == 0)break;
}
}
game.h文件中
#define _CRT_SECURE_NO_WARNINGS 1
//包含的头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
//定义标识符常量
#define LENGTH 3 //棋盘长度
#define WIDE 3 //棋盘宽度
//因为时间有限目前只适用于3到9字棋
//函数声明
void menu();//开始打印游戏菜单
void player(char arr[LENGTH][WIDE], int len, int wide);//玩家下棋
void computer(char arr[LENGTH][WIDE], int len, int wide);//电脑下棋
void initboard(char arr[LENGTH][WIDE], int len, int wide);//初始化游戏棋盘
void initarr(char arr[][WIDE], int len, int wide);//初始化数组
char textwin(char arr[][WIDE], int len, int wide);//检测游戏进程
//返回 '* '则玩家赢
//返回‘X’则电脑赢
//返回 'c' 则游戏继续
//返回 'o' 则游戏平局
int result(char arr[][WIDE], int len, int wide);//对textwin结果进行处理
void game();//游戏主体
以上是关于三子棋的进阶玩法的主要内容,如果未能解决你的问题,请参考以下文章