井字棋游戏的实现和注意细节
大家好,今天我们来写一个程序实现井字棋游戏
首先是主函数
#include<stdio.h>
#include<Windows.h>
include<time.h>
#define row 3
#define col 3
int main(){int choice;int board[row][col]={0};while(1){printf("**********************************\n");printf(" 井字棋游戏 \n");printf(" 1.游玩 2.退出 \n");printf(" 请输入你的选择 \n");printf("**********************************\n");scanf("%d",&choice);system("cls");if(choice==1){printf("start game\n");game();} else if(choice==0){printf("爱玩不玩");break; }else{printf("输入错误 请重新输入\n");Sleep(2);system("cls");} }return 0; }
主函数不易包含过多的代码以便更好的理解程序,这里的主函数主要实现的是游戏的多次游玩选择和主页面的设计(不算太美观);
接下来是游戏的主体函数game();可以将他令放入game.c中,并用game.h声明他所使用到的构造函数实现代码的进一步简化;
void game(){initial_board(board);while(judge(board)){displayboard(board);playergo(board);if(judge(board)==0)break; computergo(board);if(judge(board)==0)break; }}
这里不难看出,想要实现游戏功能,需要构造五个函数 最后再由game进行判断
目录
#1.棋盘的初始
#2.棋盘的展示
#3.玩家下棋
#4.电脑下棋
#5.判断输赢平局
#game函数对上述函数的调用
#1.棋盘的初始
棋盘的初始initial_board
void initial_board(char board[row][col]){for(int i=0;i<row;i++){for(int j=0;j<=col;j++){board[i][j]=' ';}}
这个没什么好说的,我们将board这个二维数组中的每个元素表示为稍后下棋时玩家和电脑的棋子
并把它的元素初始化为空格代表这里没有棋;为下一步搭建棋盘做准备
#2.棋盘的展示
棋盘的展示 displayboard
void displayboard(char board[row][col]){for(int i=0;i<row;i++){printf("| %c| %c| %c|\n",board[i][0],board[i][1],board[i][2]);printf("|__|__|__|\n");}
}
这里就是将棋盘一行行打印出来,使其可视化,方便玩家能够更好的下棋,值得注意的是,棋盘可以进行多次调试来达到竖线对齐与棋盘大小,棋子的形状,使棋盘更加美观.
#3.玩家下棋
玩家下棋 playergo
void playergo(char board[row][col]){int x,y; printf("轮到你下棋了\n");again:;printf("请输入你想下的坐标(1,1)~(3,3)\n");scanf("%d%d",&x,&y);if(x>3||y>3||x<1||y<1){printf("输入错误请重新输入");Sleep(1000);system("cls");goto again; }if(board[x-1][y-1]!=' '){printf("该地方已经被下过棋了");Sleep(1000); system("cls");goto again; }board[x-1][y-1]='*';}
玩家需要在一个3x3的格子中进行操作,执子*棋,所以需要进行判断,如果输出超过这个值则需要重新输入;并且已经下过的地方不允许再下棋,所以也需要进行判断.为了使游戏更加的可玩,玩家的印象中数值是从一开始而不是数组的零开始,所以需要进行设置.此外,为了使显示窗口更加简洁,输入完成后需要清屏,并且错误提示需要有sleep进行停留,使玩家能够看到.此程序中有goto语句 该语句破坏了c语言程序从上往下读的顺序,最好不要使用
#4.电脑下棋
电脑下棋computergo
电脑执#棋 这里的电脑由于作者能力有限,不会根据你下的步骤进行下棋,他下棋的地方是随机的,由rand()%2实现,rand()会随机生成一个数,%2以后取值刚刚好为0~2;所以将xy都写为随机值,并且判断棋盘上是否有棋,为了使得程序更加真实,好似对面坐着个人,你每一步棋他都会思索,所以也可以加上sleep函数
void computergo(char board[3][3]){int x,y;system("cls");printf("轮到电脑下棋\n");printf("电脑思索中\n");Sleep(2000);system("cls") ;again1:srand(time(0));x=rand()%2;y=rand()%2;if(board[x][y]!=' '){goto again1; }board[x][y]='#';
#5.判断输赢平局
判断judge
这里通过遍历行.列.对角线判断输赢,如果棋盘全满了就输出平局 通过改变winner的符号进行判断和输出数值,值得注意的是,这个函数是既有返回值又有数值打印的,因此game调用时只需要用它做一次判断,不需要在单独执行一次,否则会打印出两个相同的结果
int judge(char board[3][3]){char winner='x';int flag=0;for(int i=0;i<3;i++){for(int k=0;k<3;k++){if(board[i][k]==' ')flag++;}}if(flag==0)winner='p';elsewinner='x';if(board[0][0]==board[0][1]&&board[0][0]==board[0][2]&&board[0][0]!=' '){winner=board[0][0];}if(board[1][0]==board[1][1]&&board[1][0]==board[1][2]&&board[1][0]!=' '){winner=board[1][0];}if(board[2][0]==board[2][1]&&board[2][0]==board[2][2]&&board[2][0]!=' '){winner=board[2][0];}if(board[0][0]==board[1][0]&&board[0][0]==board[2][0]&&board[0][0]!=' '){winner=board[0][0];}if(board[0][2]==board[1][2]&&board[0][2]==board[2][2]&&board[0][2]!=' '){winner=board[0][2];}if(board[0][1]==board[1][1]&&board[0][1]==board[2][1]&&board[0][1]!=' '){winner=board[0][1];}if(board[0][0]==board[1][1]&&board[0][0]==board[2][2]&&board[0][0]!=' '){winner=board[0][0];}if(board[0][2]==board[1][1]&&board[0][2]==board[2][0]&&board[0][2]!=' '){winner=board[0][2];}if(winner=='#'){printf("电脑赢了 3秒后将选择是否重新游玩\n");Sleep(3000); system("cls") ;return 0;}if(winner=='*'){printf("您赢了 3秒后将请选择是否重新游玩\n");Sleep(3000); system("cls") ;return 0;}if(winner=='p'){printf("和棋了 3秒后将选择是否重新游玩\n");Sleep(3000); system("cls") ;return 0;}if(winner=='x'){return 1; }}
#game函数对上述函数的调用
game函数对上述函数的调用主要是通过while循环,进行生成棋盘,玩家下棋,电脑下棋,清空棋盘,并在玩家与电脑每次下棋后进行判断,若有一方获胜或平局则跳出循环并输出结果
井字棋游戏的实现和注意细节相关推荐
- php井字游戏,python实现井字棋游戏
#本游戏python3.4.0下编写调试,只能在windows下运行. import random import subprocess import time #定义函数 def draw_board ...
- Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)
前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...
- C++井字棋游戏,DOS界面版
据说有一个能保证不败的算法.明天看看先再写个PVC版的. 正题.今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习. jzq2.cpp /*N字棋游戏PVP版,DOS版本 ...
- python井字棋ai_[Python100行系列]-井字棋游戏
博客:Hzy的博客 | Hzy Bloghzeyuan.cn一些学习python的小项目,小游戏.python小项目github.com 话不多说,今天尝试用turtle库来写一个井字棋游戏.1. ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- 采用α-β算法实现井字棋游戏
题目描述 (1)图形化界面. (2)随机选取先手后手. (3)可以人-计算机或计算机-计算机 界面效果 算法 基本思想 Max-Min算法: 采用Max-Min算法进行对抗搜索,Max和Min双方均要 ...
- C++实现的基于α-β剪枝算法的井字棋游戏
"井字棋"游戏(又叫"三子棋"),是一款十分经典的益智小游戏,操作简单,娱乐性强.两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先 ...
- [文档和源码分享]C++实现的基于α-β剪枝算法的井字棋游戏
"井字棋"游戏(又叫"三子棋"),是一款十分经典的益智小游戏,操作简单,娱乐性强.两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先 ...
- React官网的井字棋游戏
React官网的井字棋游戏 这个是我在官网再次复习这个小游戏时梳理的一些思路,其中也包含了我在尝试时出的一些bug 文章目录 React官网的井字棋游戏 1.整体分析项目 2.为变量添加state并绑 ...
- c语言井字棋程序设计报告,井字棋游戏(课程设计)总结报告.doc
井字棋游戏(课程设计)总结报告 C语言贪吃蛇游戏设计总结报告 PAGE PAGE 5 丽水学院 计算机信息学院 <C语言课程设计(短一)> 指 导 书 二 ○ 一一 年 三 附件二 封面格 ...
最新文章
- 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4
- asp.net的三层架构图
- 天水市荣膺“2016中国智慧城市创新奖”
- boost::contract模块实现sum的测试程序
- 网络 http服务器-v1-多线程版本
- 办公自动化系统开发实例导航 源码_本色世界源码搭建(系统开发)
- 飞信SDK内容【转载】
- 查看商品图片,鼠标悬浮图片放大js实现
- C语言以字符串的形式读写文件
- Eplan绘图软件:Eplan P8 2.9 SP1破解
- 用WinRAR加密压缩文件
- 1. VS2017社区版安装
- [二维压缩] | 图像游程编码
- 电路中的输入输出阻抗以及阻抗匹配
- 数学分析 - 多元函数的微分学
- 没有MsVCp140如何安装MysQl,怎样安装msvcp140.dll_msvcp140.dll安装教程
- Ireport 子报表分页
- Playwright-新一代自动化工具 > 酱紫写爬虫?
- [篇二章四]_安装 Windows 11 系统
- html css样式绘制向下或者向上箭头
热门文章
- 手机端 H5 语音识别转化为文字 demo
- 可充电点电池和不可充电电池区分?
- 《汽车之家》字体反爬之论坛、问答、文章(新闻、车家号)及其评论爬取
- 动态加密?看我如何见招拆招爬取某点评全站内容!
- 认知-认知水平:认知水平
- 对996的一些看法与个人价值实现
- 演讲者模式投影到幕布也看到备注_PPT制作技巧:如何实现ppt放映不同界面(演讲者模式)?...
- 有关《家》的经典歌曲_盘点《乐队的夏天》15首经典歌曲,太好听了!
- 基因定相(Phasing) 与 SHAPEIT 原理简介
- 圆柱体积怎么算立方公式_圆柱体积计算公式 计算方法及例题