大家好,今天我们来写一个程序实现井字棋游戏

首先是主函数

#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循环,进行生成棋盘,玩家下棋,电脑下棋,清空棋盘,并在玩家与电脑每次下棋后进行判断,若有一方获胜或平局则跳出循环并输出结果​​​​​​​

井字棋游戏的实现和注意细节相关推荐

  1. php井字游戏,python实现井字棋游戏

    #本游戏python3.4.0下编写调试,只能在windows下运行. import random import subprocess import time #定义函数 def draw_board ...

  2. Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)

    前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...

  3. C++井字棋游戏,DOS界面版

    据说有一个能保证不败的算法.明天看看先再写个PVC版的. 正题.今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习. jzq2.cpp /*N字棋游戏PVP版,DOS版本 ...

  4. python井字棋ai_[Python100行系列]-井字棋游戏

    博客:Hzy的博客 | Hzy Blog​hzeyuan.cn一些学习python的小项目,小游戏.python小项目​github.com 话不多说,今天尝试用turtle库来写一个井字棋游戏.1. ...

  5. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  6. 采用α-β算法实现井字棋游戏

    题目描述 (1)图形化界面. (2)随机选取先手后手. (3)可以人-计算机或计算机-计算机 界面效果 算法 基本思想 Max-Min算法: 采用Max-Min算法进行对抗搜索,Max和Min双方均要 ...

  7. C++实现的基于α-β剪枝算法的井字棋游戏

    "井字棋"游戏(又叫"三子棋"),是一款十分经典的益智小游戏,操作简单,娱乐性强.两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先 ...

  8. [文档和源码分享]C++实现的基于α-β剪枝算法的井字棋游戏

    "井字棋"游戏(又叫"三子棋"),是一款十分经典的益智小游戏,操作简单,娱乐性强.两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先 ...

  9. React官网的井字棋游戏

    React官网的井字棋游戏 这个是我在官网再次复习这个小游戏时梳理的一些思路,其中也包含了我在尝试时出的一些bug 文章目录 React官网的井字棋游戏 1.整体分析项目 2.为变量添加state并绑 ...

  10. c语言井字棋程序设计报告,井字棋游戏(课程设计)总结报告.doc

    井字棋游戏(课程设计)总结报告 C语言贪吃蛇游戏设计总结报告 PAGE PAGE 5 丽水学院 计算机信息学院 <C语言课程设计(短一)> 指 导 书 二 ○ 一一 年 三 附件二 封面格 ...

最新文章

  1. 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4
  2. asp.net的三层架构图
  3. 天水市荣膺“2016中国智慧城市创新奖”
  4. boost::contract模块实现sum的测试程序
  5. 网络 http服务器-v1-多线程版本
  6. 办公自动化系统开发实例导航 源码_本色世界源码搭建(系统开发)
  7. 飞信SDK内容【转载】
  8. 查看商品图片,鼠标悬浮图片放大js实现
  9. C语言以字符串的形式读写文件
  10. Eplan绘图软件:Eplan P8 2.9 SP1破解
  11. 用WinRAR加密压缩文件
  12. 1. VS2017社区版安装
  13. [二维压缩] | 图像游程编码
  14. 电路中的输入输出阻抗以及阻抗匹配
  15. 数学分析 - 多元函数的微分学
  16. 没有MsVCp140如何安装MysQl,怎样安装msvcp140.dll_msvcp140.dll安装教程
  17. Ireport 子报表分页
  18. Playwright-新一代自动化工具 > 酱紫写爬虫?
  19. [篇二章四]_安装 Windows 11 系统
  20. html css样式绘制向下或者向上箭头

热门文章

  1. 手机端 H5 语音识别转化为文字 demo
  2. 可充电点电池和不可充电电池区分?
  3. 《汽车之家》字体反爬之论坛、问答、文章(新闻、车家号)及其评论爬取
  4. 动态加密?看我如何见招拆招爬取某点评全站内容!
  5. 认知-认知水平:认知水平
  6. 对996的一些看法与个人价值实现
  7. 演讲者模式投影到幕布也看到备注_PPT制作技巧:如何实现ppt放映不同界面(演讲者模式)?...
  8. 有关《家》的经典歌曲_盘点《乐队的夏天》15首经典歌曲,太好听了!
  9. 基因定相(Phasing) 与 SHAPEIT 原理简介
  10. 圆柱体积怎么算立方公式_圆柱体积计算公式 计算方法及例题