(六)C语言入门,代码编程,三子棋游戏【300行】【原创】

article/2025/7/14 0:45:32

文章目录

十二篇文章汇总,独家吐大血整理

编译环境

游戏界面

test6.c

game.c

game.h​​​​​​​


​​​​​​​

编译环境

VS2019

游戏界面

test6.c

#include <stdio.h>//std standard input output
#include <string.h>
#include <game.h>//测试三子棋游戏void menu()
{printf("**********************\n");printf("******1paly,0end******\n");printf("**********************\n");
}void game()
{char board[ROW][COL];InitBoard(board, ROW, COL);//所以是传入这三个形参DisplayBoard(board, ROW, COL);//一个数组最基本的就三点:名字,行,列char ret = 0;//接受游戏状态int ret_flag = 0;while (1) {PlayerMove(board, ROW, COL);//判断玩家是否赢得游戏ret = IsWin(board, ROW, COL);ret_flag = IsFull(board, ROW, COL);//if (ret != 'C')//	break;if (ret == '*' && ret_flag){printf("玩家赢了\n");break;}else if (ret == '#' && ret_flag){printf("电脑赢了\n");break;}else if (ret == 'Q' && ret_flag){printf("平局\n");break;}ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);//一个数组最基本的就三点:名字,行,列}
}void test()
{int input = 0;srand((unsigned int)time(NULL));menu();printf("请选择数字:");scanf_s("%d", &input);//假如这里写成了"%d\n",于是此时第一次输入1+回车无反应,第二次输入1+回车才有反应,只有按下回车再松开时数字才赋给input//printf("444\n");//上面为啥是那样,我也不是很明白,记住吧do{switch (input){case 1:game();printf("三子棋\n");break;case 0:printf("退出游戏\n");break;default:printf("请重新选择\n");break;}} while (input);//这里不填入数字,系统报错}int main()
{test();return 0;
}

game.c

#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]);int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){int j = 0;for (j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家走,");printf("请输入坐标:");//之所以用到这个while(1)循环是因为,假如我第一次输入一个坐标,电脑输入一个坐标//然后你第二次输入一个与第一次相同的坐标,此时打印“该坐标已经被占用”,此时电脑仍然输入第二个坐标//结果就是,你输入了一个坐标,电脑输入了两个坐标,因为必须加入死循环,使得每次必须输入一个坐标while (1) {scanf_s("%d%d", &x, &y);//这里输入两个数字必须用空格隔开,然后再按下回车键if (x >= 1 && x <= ROW && y >= 1 && y <= COL){if (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = '*';break;}else{printf("该坐标已经被占用,请重新输入;");continue;}}else{printf("请输入合法坐标:");continue;}}}void ComputerMove(char board[ROW][COL], int row, int col) 
{int x = 0;int y = 0;printf("电脑走,自动输入:\n");while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}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;//判断三行for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')//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[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局//如果棋盘满了返回1, 不满返回0int ret = IsFull(board, row, col);if (ret == 1){return 'Q';}//继续return 'C';
}

game.h

#define ROW 3
#define COL 3#include <stdlib.h>
#include <time.h>void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);//1. 玩家赢了 - *
//2. 电脑赢了 - #
//3. 平局 - Q
//4. 游戏继续 - C//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col);int IsFull(char board[ROW][COL], int row, int col);


http://chatgpt.dhexx.cn/article/K0J7vH0H.shtml

相关文章

C语言编程流程

2.5 C语言编程流程 C语言的编程流程 a)解决什么问题 b)怎么解决 c)编写程序 d)分析结果 2. 解决什么问题 &#xff1f; 比如说&#xff1a;我们如何打开、关闭一个计算器呢&#xff1f; 3 那么我们怎么解决呢&#xff1f; 我们可以通过命令行的方式打开、关闭计算器 在DO…

c语言万年历查询程序代码,C语言实现万年历程序的代码分享

C语言实现万年历程序的代码分享 发布时间&#xff1a;2020-04-27 09:55:52 来源&#xff1a;亿速云 阅读&#xff1a;795 作者&#xff1a;小新 今天小编给大家分享的是C语言实现万年历程序的代码&#xff0c;相信很多人都不太了解&#xff0c;为了让大家更加了解C语言实现万年…

C语言基础部分代码

这是我大一的时候新入门C语言整个语法的时候&#xff0c;课堂中所练习的一些基础问题的源码&#xff0c;现分享给新入门C语言的小白&#xff0c;以便于学习了解C语言。 目录 1.将一个正整数分解质因数 2.判断一个数是否为水仙花数 3.找出1000以内的所有完数 4.求一个数是否为素…

圣诞树代码,c语言编程,基于graphics.h

头文件 icon.h&#xff1a; #pragma once #ifndef _ICON_H_ #define _ICON_H_#include<graphics.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<string> #include<Windows.h> #include<Mmsystem.h> #prag…

c语言手机表白代码大全,C语言表白代码

在这个狂虐单身狗的节日&#xff0c;看见了别人写的告白的代码&#xff0c;分享给大家。愿天下有情人终成眷属&#xff0c;也愿爱而不得者早日释怀。 效果图&#xff1a; 代码分享&#xff1a; #include #include int main() { double y, x, z; printf("那一天\n"); …

C语言圣诞树代码

祝大家圣诞节快乐 C语言数组实现 圣诞树代码&#xff1a; #include<stdio.h> #include<stdlib.h> void hang (int *p,int n,int s){for(int i0;i<n;i){*(pi)s;} } int main(){system("color 0A");//控制台和字体颜色system("mode con cols102 l…

C语言程序设计部分基础代码(已用MD编辑器重写一篇博客)

原因&#xff1a;未用MarkDown编辑器编写&#xff0c;容易乱码。 前言 在vs2022的编译环境中不能调用scanf函数&#xff0c;只能调用scanf_s函数用于输入 For语句中的间隔用分号“&#xff1b;”例如for&#xff08;i1&#xff1b;i<n;i) scanf_s后边对应的数值应该取址…

unc0ver 发布新版本支持 iOS 13.3 越狱

pwn20wnd 的推特上更新消息&#xff0c;发布 unc0ver v4.0.0 支持 iOS 11.0-13.3。 可以在 http://unc0ver.dev 下载越狱ipa&#xff0c;也可以在 github 下载 ipa 包自己重签名安装。 原文地址&#xff1a;https://www.ioshacker.net/thread-332-1-1.html

iOS13.3Beta4发布,更新内容简介/资源站Unc0ver更新证书

iOS13.3Beta4 今天早些时候&#xff0c;苹果对外放出了iOS 13.3的第四个测试版&#xff0c;这次依然没有加入什么大的新功能&#xff0c;主要是以修复Bug为主&#xff0c;并且测试的还有系统的稳定性。其实对于苹果来说&#xff0c;现在的系统剔除小问题&#xff0c;让用户用起…

更新公告/unc0ver 4.2.1版发布

更新提示 网站证书24号更新完毕后又掉了&#xff0c;今天早上掉了后抓紧更新了一波新证书&#xff0c;目前资源站已经的软件已经可以正常下载了&#xff0c;下载方法很简单&#xff0c;老粉丝都知道&#xff0c;这里我在说一下吧&#xff01;只需要在微信公众号&#xff1a;‘宅…

iOS代码注入

文章目录 越狱准备工作Xcode shell小知识&#xff1a;生成ipa包 砸壳代码注入未完待续... 越狱 准备工作 手机型号&#xff1a;iPhone 6p手机系统&#xff1a;12.4.4越狱工具&#xff1a;unc0ver unc0ver支持11.0~14.3版本&#xff0c;并且越狱后可重置回未越狱状态&#xf…

苹果4s怎么越狱_unc0ver 越狱工具来袭,免电脑操作,支持 A7-A12,支持iOS11~iOS12.4稳定越狱...

开场 越狱大家肯定不陌生&#xff0c;之前很多小伙伴知道越狱不支持A12芯片&#xff0c;就在昨天unc0ver更新后支持A12越狱了&#xff0c;是不是很厉害&#xff0c;这次更新完后操作方法依然和之前一样&#xff0c;只需要简单几下就能越狱&#xff0c;越狱其实很简单&#xff0…

【IOS】签名ipa

文章目录 前言一、AppleID二、使用证书签名总结 前言 手里一台老破小iPhone6 unc0ver 不完美越狱&#xff0c;经常因为没电掉越狱&#xff0c;前两天用爱思安装unc0ver发现安装不了了&#xff0c;需要登录appaleID&#xff0c;小研究后成功对unc0ver签名安装成功&#xff0c;记…

iOS设备越狱

Phoenix Jailbreak iOS 9.3.5 以前在PP助手(盘古)越狱挺方便的,新的iOS系统很多都不支持&#xff0c;只能使用国外的&#xff0c;比如: Phoenix Phoenix Jailbreak 下载好 Phoenix.ipa 文件后&#xff0c;放到 MonkeyDev里安装即可&#xff0c;安装好后运行 Phoenix来进行越…

刷步恢复使用Unv0ver6.0.1工具已签名,附在线安装地址!

iOS区证书掉签状态 目前Unc0ver6.0.1已签名,可在线安装 其它应用掉签&#xff0c;无法安装 Unc0ver6.0.1 最新版本&#xff1a;6.0.1支持设备&#xff1a;A7-A14根据官方更改日志&#xff0c;unc0ver v6.0.1似乎包含以下更改&#xff1a;修复了在iOS 14上加载启动脚本的问题修复…

IOS逆向-入门篇

教程 JailBreak爱思助手unc0ver JailBreak-BypassOpenSSHnetstat命令Frida安装旧版本修改端口 抓包获取APP BundleID逆向系统Framework JailBreak 爱思助手 下载爱思助手并打开软件&#xff0c;使用USB连接IPhone确认设备连接成功后&#xff0c;点击 工具箱->一键越狱勾选…

《挑战不用macOS逆向iOS APP》第一课之环境搭建

Intro1.Windows中iPhone基本信息获取/软件安装/投屏 (1)基本信息获取(2)软件安装(3)手机投屏 2.越狱设备分析推荐/unC0ver流程详解 (1)越狱设备的分析与推荐(2)checkra1n越狱详细流程 &#xff08;1&#xff09;制作一个越狱u盘&#xff08;2&#xff09;刷入手机实现越狱 3.越…

使用Macos进行 Fugu14 Uncover A12-14 ios越狱 版本14.3-14.5.1

前言:由于目前最新版本Uncover7.0.0越狱依赖于Fugu14的untether漏洞 而Fugu14暂时只能从Macos运行一套完成流程,所以直接下载Unc0ver是会显示Unsupported的 暂时没有windows版 本帖适合愿意折腾的xdm 越狱有风险 需谨慎 该BUG已于10月29日github 提交了新版本修复了 原先作…

checkra1n越狱错误79_新的unc0ver漏洞可让运行iOS / iPadOS 12至13.5的苹果iPhone和iPad越狱...

IOS越狱社区和Android生根社区有很多共同点。我们俩都喜欢我们各自的设备,但对缺少定制感到失望。不幸的是,与许多Android设备相比,Apple设备并不容易修补。这就是为什么新的越狱行为(如最近发布的unc0ver漏洞利用)如此庞大的原因。新的unc0ver越狱功能适用于从iOS 11到iOS …

苹果iOS 13.5越狱unc0ver来了

文章目录[隐藏] 操作步骤重要提醒 今日早间著名越狱团队unc0ver发布支持所有设备和iOS版本的越狱工具unc0ver 5.0.0。unc0ver 5.0.0适用于iOS 11-iOS 13.5越狱&#xff0c;由于用户较多导致其官网崩溃&#xff0c;不过相关文件已被提取至GitHub上&#xff0c;新越狱工具利用的仍…