小小三子棋

2024-04-15 02:08
文章标签 三子 小小

本文主要是介绍小小三子棋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写呀写呀写终于写了个三子棋

三子棋

头文件

#ifndef _CHESS_H_
#define _CHESS_H_#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>#pragma warning(disable:4996)#define ROW 3
#define COL 3#define BLACK_PIECE 'X'
#define WHITE_PIECE 'O'void Game();
void InitBoard(char board[][COL], int row, int col);
void ShowBoard(char board[][COL], int row, int col);
int PlayerMove(char board[][COL], int row, int col);
void ComputerMove(char board[][COL], int row, int col);
char JudgeResult(char board[][COL], int row, int col);#endif

定义规则及判定的test.c

#include "test.h"void InitBoard(char board[][COL], int row, int col)
{int i = 0;for (; i < row; i++){int j = 0;for (; j < col; j++){board[i][j] = ' ';}}
}void ShowBoard(char board[][COL], int row, int col)//显示棋盘
{printf(" \\ | [ 1 ] | [ 2 ] | [ 3 ] |\n");int i = 0;for (; i < row; i++){printf("----------------------------\n");printf(" %d | [ %c ] | [ %c ] | [ %c ] |\n", i + 1, board[i][0], board[i][1], board[i][2]);}printf("----------------------------\n");
}int PlayerMove(char board[][COL], int row, int col)
{int x = 0;int y = 0;printf("Please Enter Your Pos<x, y># ");scanf("%d %d", &x, &y);if (x >= 1 && x <= 3 && y >= 1 && y <= 3){if (board[x - 1][y - 1] != ' '){return 2;}board[x - 1][y - 1] = BLACK_PIECE;return 0;}return 1; //用户输入坐标有误
}//用户赢了 BLACK_PIECE 'X'
//电脑赢了 WHITE_PIECE 'O'
//平局, 'E'
//next, 'N'
char JudgeResult(char board[][COL], int row, int col)
{int i = 0;for (; i < row; i++){if (board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){return board[i][0];}}for (i = 0; i < col; i++){if (board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){return board[0][i];}}if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]){return board[0][0];}if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]){return board[1][1];}for (i = 0; i < row; i++){int j = 0;for (; j < col; j++){if (board[i][j] == ' '){return 'N';}}}return 'E';
}void ComputerMove(char board[][COL], int row, int col)
{while (1){int i = rand() % row;int j = rand() % col;if (board[i][j] == ' '){board[i][j] = WHITE_PIECE;break;}}printf("Computer ... Done\n");Sleep(1000);
}
void Game()
{char board[ROW][COL];InitBoard(board, ROW, COL);char result = 'N';srand((unsigned long)time(NULL));while (1){ShowBoard(board, ROW, COL);int type = PlayerMove(board, ROW, COL);if (1 == type){printf("坐标有误,请重输\n");continue;}else if (2 == type){printf("你输入的坐标已经被占用,请重新输入!\n");continue;}else{printf("Player  ... Done!\n");}result = JudgeResult(board, ROW, COL);if (result != 'N'){break;}ComputerMove(board, ROW, COL);result = JudgeResult(board, ROW, COL);if (result != 'N'){break;}}ShowBoard(board, ROW, COL);switch (result){case 'E':printf("平局!\n");break;case BLACK_PIECE:printf("u win!\n");break;case WHITE_PIECE:printf("u lost!\n");break;default://bug!!break;}
}

简略来讲如下

  • 初始化棋盘
  • 显示棋盘
  • 人走
  • 判定(显示)
  • 机走
  • 判定(显示)
  • 。。。
  • 判定输赢(显示)

设立界面的main.c

#include "test.h"void Menu()//建立菜单
{printf("######################\n");printf("######  三子棋  ######\n");printf("### 1.Play   2.Exit ##\n");printf("######################\n");printf("please select: >> ");
}int main()
{int quit = 0;while (!quit){int select = 0;Menu();scanf("%d", &select);switch (select){case 1:Game();break;case 2:quit = 1;break;default:printf("Enter Error!\n");break;}}system("pause");return 0;
}

包含菜单等

这篇关于小小三子棋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904636

相关文章

小小水仙花

什么是水仙花数呢?   水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗 数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。 实现:

小小笔记,大家分享

1.SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI,nginx与php结合时候,使用fastcgi2.Require在包含一个找不到的问题的时候, 会前后抛出俩个错误, 1) WARNING : 在PHP试图打开这个文件的时候抛出. 2) E_COMPILE_ERRO

小小“扯蛋”

求职简历!!) 本人擅长Ai、Fw、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、C++、C#、Java、Ruby、JavaScript、PHP、C、Perl、Lisp、Python、Objective-C、ActionScript等单词的拼写,熟悉Windows、Linux、MacOS、IOS、Android等系统的开关机。求一份月薪上万的工作 哎呦! 我类个去,这周怎么叫我写

小小中药师,巧手制香囊!《大宅门》话剧特别活动,绽放中医药文化的魅力!

6月14-16日,《大宅门》话剧在苏州湾大剧院开演,在话剧演出期间,李良济为观众朋友准备了丰富多彩的中医药文化活动,一起学习中医药知识,感受中医药文化的魅力~ 小小中药师,巧手做香囊 《大宅门》话剧白家人的百年故事发生的背景之一就是百草厅药铺,为了让大家了解中医药知识,6月16日下午,李良济在苏州湾大剧院,开展“小小中药师,巧手制香囊”活动,让孩子们在制作香囊的过程中,学习

移动UI:小小工作台,竟然别有洞天(N多样式),上图了。

设计移动UI的工作台页面时,可以考虑以下几个方面: 布局设计:首先确定页面的布局,可以使用单栏、双栏或九宫格等等布局方式。布局应该简洁明了,方便用户快速找到需要的功能模块。功能模块:根据用户需求确定需要的功能模块,并将其以图标或文字的形式展示在页面上。可以考虑将常用的功能置于页面的顶部或底部,方便用户快速访问,而次要功能则可以放在页面的中间位置。 导航设计:在页面顶部或底部添加

ACM—NYOJ小小结

我觉得做题不是越多越好,而是善于总结! 做南阳理工题目也有一段时间了,我觉得还是有必要总结一下,把以前做过的题目再重新看看,提取其中的知识点,重点,达到灵活运用才是王道! 算法的五个特点: 1. 能行性(或有效的)  2. 有限性 3. 确定性 4. 输入 5. 输出 一、基本输入: 每道题目基本上都要求输入数据,因此你的程序要准确接收输入的数据,这步做好了,下面的才有可能进行

【儿童节特辑】用AI创造音乐,变身小小音乐家!

在儿童节这个充满欢笑的日子里,让我们一起探索如何用AI技术为孩子们准备一份特别的礼物——一张由AI生成的音乐专辑。🎵✨ 🎼 文字变旋律:开启音乐创作之旅 想象一下,只需一段文字,就能编织出一曲悠扬悦耳的旋律。华为云ModelArts平台让这一切变得可能。通过简单的操作,孩子们可以成为“小小作曲家”,体验AI音乐创作的奇妙之旅。 MusicGen可以根据文字描述或者已有旋律生成高质量

阿里测试岗小小面经

这已经是第三个博客了,前两个博客加起来写的文章不到十篇。作为一个IT人,想想好像有点不应该。刚好这次去阿里测试岗位各种被虐,虽然自信心受到很大打击,但想想早点把自己的缺点暴露也是好事。索性把这次面试经验记下来,在求职路上鞭笞一下自己,也给其他人走在求职路上的同仁一些借鉴。 这次阿里实习我报的是测试开发岗位,3月29号笔试,然后等了很久都没收到面试通知。中途大家那个急啊,一听说有人接到电话面试大

我的20个小小技巧 --编辑中

1.oracle数据库导出数据保存为Excel文档:     1)在sql窗口编辑/选中要导出数据的目标表,右键-->导出数据;     2)在导出窗口中选择第二个选项卡“SQL插入”;     3)选择保存路径,命名保存文件名为XXX.csv 格式(重要);     4)点击导出,即可导出Excel可以打开的文档咯。 2.jsp页面包含IFrame布局时,登录页面设置,当登录超时

小小字符串竟然如此嚣张 —— 聊聊 Java 的 String

大家好,我是徒手敲代码。 今天来分享几个 String 在面试当中,比较常见的问题。这个东西用得最多,而且底层的原理,面试也经常问。 两种创建方式,有什么区别? 比如,要创建一个 “Gary” 的字符串,可以采用以下这两种方式: String s1 = new String("Gary");String s2 = "Gary"; 第一种方式,用 new 关键词创建,无论字符串常量池中