三子棋小游戏
来源:互联网 发布:数据库union和join 编辑:程序博客网 时间:2024/05/18 15:06
在编写三子棋时最好采用图片中创建项目方式,将源文件和头文件分开创建
以后头文件放在game.h中就可以在其他源文件直接调用game.h头文件就行
game.h中放的代码如下:
#ifndef _GAME_H_#define _GAME_H_#include<stdio.h>#include"game.h"#include<windows.h>#include<time.h>#define ROW 3#define COL 3void InitBoard(char board[ROW][COL],int row,int col);//初始化棋盘函数void DisplayBoard(char board[ROW][COL],int row,int col);//打印棋盘函数void CompeterMove(char board[ROW][COL],int row,int col);//电脑走函数void PlayerMove(char board[ROW][COL],int row,int col);//人走函数char Iswin(char board[ROW][COL],int row,int col); //判断谁赢函数#endifgame.c中主要放的是游戏中所需要的的功能
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void InitBoard(char board[ROW][COL],int row,int col){int i = 0;int j = 0;for(i = 0;i<row;i++){for(j = 0;j<col;j++){board[i][j] = ' ';}}}void DisplayBoard(char board[ROW][COL],int row,int col){int i = 0;for(i = 0;i < ROW;i++){printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);if(i < ROW - 1){printf("---|---|---\n");}}}void CompeterMove(char board[ROW][COL],int row,int col){int x = 0;int y = 0;printf("电脑走\n");while(1){x = rand()%row; //限制电脑行走范围0-2y = rand()%col;if(board[x][y] == ' '){board[x][y] = 'D';break;} }}void PlayerMove(char board[ROW][COL],int row,int col){int x = 0;int y = 0;printf("玩家走\n");while(1){printf("请输入->(x,y)");scanf("%d%d",&x,&y);if(x>=1 && x<=3 && y>=1 && y<=3){if(board[x-1][y-1] == ' '){board[x-1][y-1] = '*';break;}else {printf("坐标被占,请重新输入\n");continue;}}else{printf("输入坐标不在棋盘内\n");continue;}}} static int Isfull(char board[ROW][COL],int row,int col){int i = 0;int j = 0;for(i = 0;i< row;i++){for(j= 0;j< col;j++){if(board[i][j] == ' '){return 0;}}}return 1;}char Iswin(char board[ROW][COL],int row,int col){int i = 0;char ret = 0;for(i = 0;i < row;i++){if((board[i][0]==board[i][1])&&(board[i][1]==board[i][2])&&(board[i][1]!= ' ')){return board[i][1];}}for(i = 0;i < col;i++){ if((board[0][i]==board[1][i])&&(board[1][i]==board[2][i])&&(board[1][i]!=' ')){return board[1][i];}}if((board[0][0]==board[1][1])&&(board[2][2]==board[1][1])&&(board[1][1]!=' ')){return board[1][1];}else if((board[0][2]==board[1][1])&&(board[2][0]==board[1][1])&&(board[1][1]!=' ')){return board[1][1];}if(Isfull(board,row,col)){return 'q';}else{return ' ';}}
test10.c中放的是main函数以及菜单的打印和调用game.c中功能的函数
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu(){printf("******************************\n");printf("**** 欢迎来到三子棋游戏 ****\n");printf("**** 1.玩游戏 0.退出 ****\n");printf("******************************\n");}void game(){char ret = 0;char board[ROW][COL]={0};InitBoard(board,ROW,COL); //初始化棋盘DisplayBoard(board,ROW,COL);//打印棋盘while(1){PlayerMove(board,ROW,COL);//玩家走DisplayBoard(board,ROW,COL);//显示棋盘ret = Iswin(board,ROW,COL);//判断谁获胜{if(ret!=' ') //如果返回的是' ',这说明没有人获胜,游戏继续,如果不是,则有人获胜或平局,跳出while循环{break;}}CompeterMove(board,ROW,COL);//电脑走DisplayBoard(board,ROW,COL);//显示电脑棋盘ret = Iswin(board,ROW,COL);{if(ret!=' '){break;}}}if(ret == 'D'){printf("电脑赢\n");}else if(ret == '*'){printf("你赢了\n");}else if(ret == 'q'){printf("平局\n");}}void test(){int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请输入:");scanf("%d",&input);switch(input){case 0:break;case 1:game();break;default:printf("输入错误,请重新输入\n");break;}}while(input);}int main(){test();system("pause");return 0;}
在编写这个程序时我出现的问题有:
1.每行相等时==写成了=,这样判断值一直有问题;
2.在返回return 'q ' 时,我多给q后面打了一个空格,然后就会出现逻辑错误;
ret = Iswin(board,ROW,COL);
{
if(re t!= ' ' ) // 这里就会接收' ',而不是q,所以当我棋满是就会卡死
{
break;
}
}
3.每次打印棋盘都是要判断是否有人获胜
4.在你编写游戏时,你要一步一步编写,一个功能实现后再加另一个功能,有错误了慢慢调试
阅读全文
0 0
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 【小游戏】三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 三子棋小游戏
- 小游戏:三子棋
- 三子棋小游戏
- 三子棋小游戏
- 三子棋 小游戏
- C语言小游戏"三子棋"
- 超级小游戏:三子棋
- 三子棋小游戏的实现
- jenkins控制台输出中文乱码问题解决方法
- 分享一个算法,计算能在任何背景色上清晰显示的前景色
- c++中count函数的用法、cin>>hex>>a
- android数据存储之SQLite的使用
- 【思路】1.后台登录
- 三子棋小游戏
- 51NOD-1082-与7无关的数
- C和指针之动态内存分配之编程练习3
- XPS15 9560 UBUNTU安装
- 程序员到底该怎么找资源?
- ELKB6.0部署记录
- 【思路】2.权限控制
- centos 6.8 搭建LAMP环境及配置
- 并发工具类(三)控制并发线程的数量 Semphore