(我们这里以五子棋为例子,具体的值可以自行修改哦)
void menu()//游戏菜单界面
{
printf("****************************************************\n");
printf("*********输入1开始游戏 输入0退出游戏************\n");
printf("****************************************************\n");
}
printf("请选择先手还是后手:(1为先手,2为后手)\n");
scanf("%d", &n);
system("cls"); //清屏操作 为了界面更好看=)
if (n == 1) {
while (1) { //用while(1)的原因后面会提到
;//过程
}
}
if (n == 2) {
while (1) {
;//过程
}
}
void init(int m, int n) //初始化为空格
{
int i = 0, j = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
a[i][j] = ' ';
}
}
}
原因在后面会说到(说是后面,其实就在下一点)
(我做了两个版本的棋盘) 虽然好像没什么意义,但是好看捏=)
//井字形棋盘
void display( int m, int n)
{
int i = 0,j=0;
for (i = 0; i < m; i++)//以给定的行数 重复打印
{
//一行的内容
for (j = 0; j < n; j++)
{
printf(" %c ", a[i][j] );
if (j < n - 1)
printf("|");
}//打印出有数据的一行
printf("\n");
if (i < h - 1)
{
for (j = 0; j < n; j++)
{
printf("---");
if (j < n - 1)
printf("|");
}//打印出分割行
}
printf("\n");
}
}
//封闭型棋盘
void display(int m, int n)
{
int i = 0, j = 0;
for (i = 0; i < m + 1; i++)//以给定的行数 重复打印
{
for (j = 0; j < n + 1; j++)
{
printf("|");
if (j < n)
{
printf("---");
}
}//打印出分割行
printf("\n");
if (i < n)
{//一行的内容
for (j = 0; j < n + 1; j++)
{
printf("|");
if (j < n)
printf(" %c ", a[i][j]);
}//打印出有数据的一行
}
printf("\n");
}
}
(图为玩家已经下了第一步)
*是玩家棋子,-是电脑棋子
void playermove(int m, int n) {
printf("玩家下棋\n");
printf("请输入你要下棋的位置:\n");
display(h, l);
int q = 0, w = 0;
while (1) {
scanf("%d%d", &q, &w);
if ((q >= 1 && q <= m) || (w >= 1 && w <= n)) { //对于玩家来说
if (a[q - 1][w - 1] == ' ') { //对于电脑,坐标应-1
a[q - 1][w - 1] = '*';
system("cls");
break;
}
else {
printf("该位置被占用,请重新输入\n");
}
}
else {
printf("该位置不存在,请重新输入\n");
}
}
}
(需要进行对输入坐标的判断)
为了保证游戏的公平性,使用随机数生成
//随机在空处下
void computermove(int m, int n) {
system("cls");
printf("电脑下棋\n");
int q = 0, w = 0;
while (1) {
q = rand() % m; //用随机数生成坐标
w = rand() % n;
if (a[q - 1][w - 1] == ' ') { //下标要-1哦
a[q - 1][w - 1] = '-';
break;
}
}
}
因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间)
了解就好,如果有人问你,就可以浅浅装个b啦=)帮别人答疑解惑啦=)
可恶,扯远了,看我怎么圆回来
下棋嘛,也就那么几种获胜形式,要么一横排,要么一竖列,要么对角线(当然憋忘了对角线有两种)
废话不多说,直接看代码叭=)
int win(int m, int n) {
//玩家赢,*
//电脑赢,-
//平局,p
int i = 0, j = 0;
int count = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n - 1; j++) {
if (a[i][j] == a[i][j + 1] && a[i][j] != ' ' ) { //两个为一组比较//横排相等
count++;
}
}
if (count == m-1) { //因为两个一组,所以-1
return a[i][j];
}
count = 0;
}
for (j = 0; j < n; j++) {
for (i = 0; i < m - 1; i++) {
if (a[i][j] == a[i + 1][j] && a[i][j] != ' ') { //竖列相等
count++;
}
}
if (count == n-1 ) {
return a[i][j];
}
count = 0;
}
j = 0;
for (i = 0; i < m-1; i++) {
if (a[i][j] == a[i + 1][j + 1] && a[i][j] != ' ') { //"\"对角线
count++;
}
j++;
}
if (count == m-1) {
return a[i][j];
}
count = 0;
j = j - 1;
for (i = 0; i < m-1; i++) {
if (a[i][j] == a[i + 1][j + 1] && a[i][j] != ' ' ) { //"/"对角线
count++;
}
j--;
}
if (count == m-1 ) {
return a[i][j+1];
}
if (full(h, l) == 1) { //判断是否格子被占满,若未出胜负前格子已满,即为平局
return 'p';
}
return 'g'; //都不满足就继续,"go"
}
int full(int m, int n) { //判断是否满
int i = 0, j = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (a[i][j] == ' ')
return 0;
}
}
return 1;
}
我直接按代码执行的顺序贴代码叭
int main()//大框架
{
test();
return 0;
}
void test()//游戏流程
{
int a;
menu();
do
{
scanf("%d", &a);
switch (a)
{
case 1:
printf("开始我们的游戏吧!\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("请重新输入\n");
}
} while (a);
}
void game()//游戏实现
{
srand((unsigned int)time(NULL));
init(h, l);//初始化棋盘(放入空格)
int n = 0;
char e = 0;
//游戏过程
printf("请选择先手还是后手:(1为先手,2为后手)\n");
scanf("%d", &n);
system("cls");
if (n == 1) {
while (1) {
playermove(h, l);
e = win(h, l);
if (e != 'g') {
break;
}
computermove(h, l);
display(h, l);
e = win(h, l);
if (e != 'g') {
break;
}
}
}
if (n == 2) {
while (1) {
computermove(h, l);
display(h, l);
e = win(h, l);
if (e != 'g') {
break;
}
playermove(h, l);
display(h, l);//打印棋盘
e = win(h, l);
if (e != 'g') {
break;
}
}
}
if (e == '*') {
display(h, l);
printf("恭喜你赢得胜利\n");
printf("是否要重新开始:");
}
if (e == '-') {
display(h, l);
printf("很遗憾你输了\n");
printf("是否要重新开始:");
}
if (e == 'p') {
display(h, l);
printf("本局为平局\n");
printf("是否要重新开始:");
}
}
system("cls")可以实现清屏,其头文件是
我写的多文件形式,记得要用" "引用自定义的头文件哦
#define h 5
#define l 5
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
char a[h][l];//建立棋盘信息
void init(int m, int n);
void display(int m, int n);
void playermove(int m, int n);
void computermove(int m, int n);
int win(int m, int n);
int full(int m, int n);
完美落幕啦~~~撒花~~~
感谢您的观看! =)
这是孩子第一篇博客,有不妥之处可以直接告诉我哦,我会很感谢您的建议(鞠躬)