码迷,mamicode.com
首页 > 其他好文 > 详细

写一个三子棋小游戏的感悟

时间:2015-11-04 19:48:11      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:小游戏   c语言   

在写之前,我已经把函数的结构设计出来,主要由以下几个函数实现;

1:初始化棋框

2:玩家下棋

3:电脑下棋

4:判断胜负

5:更新棋框

6:主函数

在写的过程中碰到了不能将玩家下的位置放入棋框中,原因是在函数定义过程中没有将二维数组引入,

导致棋框更新不正确,在函数中引用二维数组时,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同,因此在函数定义时只需要写int qk(arr[][i]),i为常数,在主函数调用时只需要写qk(arr)即可,因为数组名本身就是地址,所以就相当于将arr[0][0]的地址传给函数,所以在函数中可以直接改变数组的内容。源码如下:

//三子棋

#define _CRT_SECURE_NO_WORNINGS 1

#include<stdio.h>

#include<stdlib.h>

void qk(int i, int j,char arr[][3])

{

for (i = 0; i < 3; i++)

{

for (j = 0; j < 3; j++)

{

arr[i][j] = ‘ ‘;

}

}

for (i = 0; i < 3; i++)

{

printf(" %c| %c| %c", arr[i][0], arr[i][1], arr[i][2]);

if (i < 2)

{

printf("\n__|__|__\n");

}


}

printf("\n****************************\n");

}

void print(int i, int j, char arr[][3])

{

for (i = 0; i < 3; i++)

{

printf(" %c| %c| %c", arr[i][0], arr[i][1], arr[i][2]);

if (i < 2)

{

printf("\n__|__|__\n");

}


}

printf("\n***************************\n");

}

void  play(int i,int j,char arr[][3])

{

     printf("请输入棋子坐标");

while (1)

{

       int m = 0, n = 0;

       scanf_s("%d%d", &m, &n);

i = m - 1;

j = n - 1;

if ((arr[i][j] != ‘o‘)&&(arr[i][j] != ‘x‘))

{

arr[i][j] = ‘o‘;

break;

}

else

printf("请重新输入");

}

}

 int  comp(int i,int j,char arr[][3])

{

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 3; j++)

{

if (arr[i][j] != ‘o‘&&arr[i][j] != ‘x‘)

{

arr[i][j] = ‘x‘;

return 0;

}

}

printf("************************");

}

return 1;

}

 int judge(int i, int j,char arr[][3])

 {

  for (i = 0; i < 3; i++)

  {

  if (arr[i][0] == ‘o‘&&arr[i][1] == ‘o‘ && arr[i][2] == ‘o‘)

  {

  printf("您赢了\n");

  return 0;

  }

  if (arr[i][0] == ‘x‘&&arr[i][1] == ‘x‘ && arr[i][2] == ‘x‘)

  {

  printf("您输了\n");

  return 0;

  }

  if (arr[0][i] == ‘o‘&&arr[1][i] == ‘o‘ && arr[2][i] == ‘o‘)

  {

  printf("您赢了\n");

  return 0;

  }

  if (arr[0][i] == ‘x‘&&arr[1][i] == ‘x‘ && arr[2][i] == ‘x‘)

  {

  printf("您输了\n");

  return 0;

  }

 

  }

  if ((arr[0][0] == ‘o‘&&arr[1][1] == ‘o‘ && arr[2][2] == ‘o‘) || (arr[0][2] == ‘o‘&&arr[1][1] && arr[2][0]))

  {

  printf("您赢了\n");

  return 0;

  }

  if ((arr[0][0] == ‘x‘&&arr[1][1] == ‘x‘ && arr[2][2] == ‘x‘) || (arr[0][2] == ‘x‘&&arr[1][1]==‘x‘ && arr[2][0]==‘x‘))

  {

  printf("您输了\n");

  return 0;

  }

  return 1;

 }

int main()

{

char arr[3][3];

int i = 3, j = 3;

int ret;

qk(i, j, arr);//初始化棋框

while (1)

{

play(i, j, arr);

print(i, j, arr);

ret=judge(i, j, arr);

if (ret == 0)

{

printf("游戏结束");

break;

}

comp(i, j, arr);

print(i, j, arr);

ret=judge(i, j, arr);

if (ret == 0)

{

printf("游戏结束");

break;

}

}

system("pause");

return 0;

}

过几天继续写,今天的水平有限,希望大神提出问题。。

本文出自 “qin-wang” 博客,请务必保留此出处http://10810196.blog.51cto.com/10800196/1709661

写一个三子棋小游戏的感悟

标签:小游戏   c语言   

原文地址:http://10810196.blog.51cto.com/10800196/1709661

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!