经典小游戏(一)C实现——三子棋

news2024/11/18 19:30:33
	switch(input)

	{

	

	case 1:

		printf("三子棋\n");//这里先测试是否会执行成功

		break;

	case 0:

		printf("退出游戏\n");

		break;

	default :

		printf("选择错误,请重新选择!\n");

		break;

	}

}

while(input);//直到输入的结果为假,循环才会结束

}




> 这样敲代码会让自己更容易梳理自己的思路。

> 

> 首先一执行代码就会打印游戏菜单,玩家输入1就开始游戏,输入0就退出游戏,这样当玩家结束一次游戏后便可以将玩家输入的数字当成do while循环的判断条件,因为进入游戏需输入1,所以玩家结束一次游戏后便会进入do while循环再打印一次菜单(便于多次游戏),直到玩家不想玩了输入0即可退出游戏。  

> 开始游戏,我们首先定义一个二维数组来储存玩家和电脑下的棋子,首先赋初值为空格,当玩家或电脑在某处落棋后将其赋值为对应的字符即可。  

> 在玩家未落棋前先打印一个空棋盘,之后玩家或电脑每走一步棋就打印一次落棋后的棋盘,最后通过判断棋盘上的棋子情况判断是电脑赢还是玩家赢还是和棋(棋盘上棋子落满但未决胜负为和棋),否则游戏继续。  

>  



### mine实现菜单函数代码块



> 1.开始游戏 0.退出游戏



void menu()

{

printf("******************************\n");

printf("*****  1.paly     0.exit  ****\n");

printf("******************************\n");

}




 展示效果:



![](https://img-blog.csdnimg.cn/b5ac03ae0b4d491899a6988bf55b2812.png)



完整源代码

=====



#include<stdio.h>

#include"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);

//告诉我们四种状态

//玩家赢 ‘*’

//电脑赢 ‘#’

//平局 ‘Q’

//继续 ‘C’

char IsWin(char board[ROW][COL],int row,int col);

void menu()

{

printf("******************************\n");

printf("*****  1.paly     0.exit  ****\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!='C')

	{

	

		break;

	}

	//电脑下棋

	ComputerMove(board,ROW,COL);

	DisplayBoard(board,ROW,COL);

	//判断电脑是否赢

	ret=IsWin(board,ROW,COL);

	if(ret!='C')

	{

	

		break;

	}

}

	if(ret=='*')

	{

	

		printf("玩家赢\n");

	}

	else if(ret=='#')

	{

	

		printf("电脑赢\n");

	}

	else

		printf("平局\n");

}

void test()

{

int input = 0;

//srand((unsigned int)time(NULL));

do

{



	menu();

	printf("请选择:>");

	scanf("%d",&input);

	

	switch(input)

	{

	

	case 1:

		game();

		break;

	case 0:

		printf("退出游戏\n");

		break;

	default :

		printf("选择错误,请重新选择!\n");

		break;

	}

}

while(input);

}

int main()

{

test();



return 0;

}

#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++)

// {

//

// //1.打印一行的数据

// printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);

// //2.打印分割行

// if(i<row-1)

// printf(“—|—|—\n”);

// }

//}

//优化后:

void DisplayBoard(char board[ROW][COL],int row,int col)

{

int i = 0;

for(i=0; i<row; i++)

{

	//1.打印一行的数据

	int j = 0;

	for(j = 0;j<col;j++)

	{

	

		printf(" %c ",board[i][j]);

		if(j < col - 1)//最后的列内容不打印|

			printf("|");

	}

	printf("\n");

	//2.打印分割行//最后的行不打印---|---|----

	if(i < row - 1)

	{

		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("玩家走:>\n");

while(1)

{

	printf("请输入要下的坐标:>");

	scanf("%d%d",&x,&y);

	//判断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("该坐标被占用\n");

		}



	}

	else

	printf("坐标非法,请重新输!\n");

}

}

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;

	}

}

}

//返回1,表示棋盘满了

//返回,表示棋盘没满

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]==' ')

		{

这里分享一份由字节前端面试官整理的「2021大厂前端面试手册」,内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题、数据结构与算法。全部整理在下方文档中,共计111道

HTML

  • HTML5有哪些新特性?

  • Doctype作⽤? 严格模式与混杂模式如何区分?它们有何意义?

  • 如何实现浏览器内多个标签页之间的通信?

  • ⾏内元素有哪些?块级元素有哪些? 空(void)元素有那些?⾏内元 素和块级元素有什么区别?

  • 简述⼀下src与href的区别?

  • cookies,sessionStorage,localStorage 的区别?

  • HTML5 的离线储存的使用和原理?

  • 怎样处理 移动端 1px 被 渲染成 2px 问题?

  • iframe 的优缺点?

  • Canvas 和 SVG 图形的区别是什么?

JavaScript

  • 问:0.1 + 0.2 === 0.3 嘛?为什么?

  • JS 数据类型

  • 写代码:实现函数能够深度克隆基本类型

  • 事件流

  • 事件是如何实现的?

  • new 一个函数发生了什么

  • 什么是作用域?

  • JS 隐式转换,显示转换

  • 了解 this 嘛,bind,call,apply 具体指什么

  • 手写 bind、apply、call

  • setTimeout(fn, 0)多久才执行,Event Loop

  • 手写题:Promise 原理

  • 说一下原型链和原型链的继承吧

  • 数组能够调用的函数有那些?

  • PWA使用过吗?serviceWorker的使用原理是啥?

  • ES6 之前使用 prototype 实现继承

  • 箭头函数和普通函数有啥区别?箭头函数能当构造函数吗?

  • 事件循环机制 (Event Loop)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于FreeRTOS+STM32CubeMX+LCD1602+MCP23S09(SPI接口)的I/O扩展器Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、SPI配置: 四、部分软件: 1)、主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : mai…

游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数&#xff0c;我一直都有小小的迷思&#xff0c;总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数&#xff0c;打造更接近人类的AI算法&#xff0c;这篇文章旨在讨论下 目录 3.10. 艾宾浩斯曲线 3.10.1. 定义 3.10.1.1. 曲线计算公式 3.10…

想用AI高端算力训练模型?试试英智BayStone平台

随着生成式人工智能的迅猛增长&#xff0c;各大公司纷纷推出强大的 AI产品以提升自身核心竞争力&#xff0c;对于依赖基础模型进行推理训练&#xff0c;同时需要高级基础设施的人工智能初创企业&#xff0c;急需使用高端智算算力来加速模型训练与产品研发创新。 算力是否充足&…

测试接口的完整流程

背景 今天睿哥给我布置了一个任务&#xff0c;叫我学习一下如何测试接口。 然后我就上网搜索去了解了一下&#xff0c;看看测试接口是什么。看了很久之后&#xff0c;我大概对接口测试有了一定的理解。 通俗来说&#xff0c;接口测试就是使用某种工具模拟客户端发送http请求…

Github 上 Star 数最多的大模型应用基础服务 Dify 深度解读(一)

背景介绍 接触过大模型应用开发的研发同学应该都或多或少地听过 Dify 这个大模型应用基础服务&#xff0c;这个项目自从 2023 年上线以来&#xff0c;截止目前&#xff08;2024-6&#xff09;已经获得了 35k 多的 star&#xff0c;是目前大模型应用基础服务中最热门的项目之一…

HEC-HMS水文模型教程

原文链接&#xff1a;HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…

智能驾驶系列报告:特斯拉智能驾驶方案简剖

不同于绝大多数国内车企在自动驾驶上采取多传感器融合方案&#xff0c;特斯拉FSD在发展初期就摒弃激光雷达、且不配备高清地图&#xff0c;成为在感知层以摄像头为核心的纯视觉解决方案代表;其依靠车身搭载的摄像头来捕捉周围的环境信息&#xff0c;并经过算法及神经网络模型处…

JOSEF约瑟 YHSJ-J打滑开关 使用带速0.3-5.0m/s

产品概述&#xff1a; YHSJ-J打滑开关是一种智能型超速打滑检测器&#xff0c;采用非接触式监测方式&#xff0c;自动采集设备正常运行时的转速&#xff0c;并通过监测转速变化量和相关控制参数进行比较&#xff0c;以判断是否存在打滑现象。 该产品已广泛应用于输送系统中&…

【智慧水利数字孪生解决方案】

在2024年全国水利工作重点会议上&#xff0c;水利部部长李国英发表重要讲话&#xff0c;强调&#xff1a;大力推进数字孪生水利建设。坚持需求牵引、应用至上、数字赋能、提升能力&#xff0c;加快构建数字孪生水利体系&#xff0c;为水利治理管理提供前瞻性、科学性、精准性、…

“论云上自动化运维及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸&#xff0c;通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本&#xff0c;提升系统的灵活度&#xff0c;以及系统的交付速度&#xff0c;增强系统的可靠性&#xff0c;构建更加安全、可信、…

明星中药企业系列洞察(九)一手好牌打的稀烂!近500年老字号锁定退市,太安堂为何“塌房”了?

近日&#xff0c;太安堂发布公告称&#xff0c;公司已收到深交所下发的《关于广东太安堂药业股份有限公司股票终止上市的决定》&#xff0c;深交所决定终止公司股票上市&#xff0c;预计其最后交易日期为7月4日。太安堂曾作为国内知名的中成药上市公司之一&#xff0c;是国家级…

动捕系统如何解决“超出捕捉范围”的挑战

惯性运动捕捉系统改变了我们捕捉运动的方式&#xff0c;使艺术家、创作者和独立工作室能够摆脱动捕实验室和复杂设置的限制。通过身体上的传感器和无线连接&#xff0c;动捕演员可以自由移动和并作出各种高难度动作。然而具有高自由度的惯性动捕系统&#xff0c;经常面临着超出…

深入解析 androidx.databinding.BaseObservable

在现代 Android 开发中&#xff0c;数据绑定 (Data Binding) 是一个重要的技术&#xff0c;它简化了 UI 和数据之间的交互。在数据绑定框架中&#xff0c;androidx.databinding.BaseObservable 是一个关键类&#xff0c;用于实现可观察的数据模型。本文将详细介绍 BaseObservab…

雨量气象站:野外监测的得力助手

在广阔无垠的大自然中&#xff0c;雨量、风力、风向、温湿度以及大气压力等气象数据对于各种应用场景都至关重要。特别是在野外、森林防火、山洪监测等无市电供电的场合&#xff0c;一款高效可靠的监测设备更是不可或缺。雨量气象站正是为了满足这些需求而诞生的户外专用监测站…

昇思25天学习打卡营第8天|模型训练

昇思25天学习打卡营第8天|模型训练 前言模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 个人任务打卡&#xff08;读者请忽略&#xff09;个人理解与总结 前言 非常感谢华为昇思大模型平台和CSDN邀请体验昇思大模型&#xff01;从…

剖析DeFi交易产品之UniswapV4:概述篇

本文首发于公众号&#xff1a;Keegan小钢 UniswapV4 与 UniswapV3 相比&#xff0c;算法上并没有什么改变&#xff0c;依然还是采用集中流动性模型&#xff0c;但架构上变化很大&#xff0c;包括功能架构&#xff0c;也包括技术架构。相比之前的版本&#xff0c;UniswapV4 最大…

光扩散微球市场增长空间大 我国已实现其产业化

光扩散微球市场增长空间大 我国已实现其产业化 光扩散微球是一种高性能微球材料&#xff0c;具有优异的光学和力学性能&#xff0c;且不含杂质&#xff0c;将其涂抹在光扩散膜&#xff08;板&#xff09;上&#xff0c;可以将点光源变成面光源&#xff0c;使显示面板的布光更加…

大型语言模型能否生成可信的事实核查解释?——通过多智能体辩论实现可信可解释的事实核查

Can LLMs Produce Faithful Explanations For Fact-checking? Towards Faithful Explainable Fact-Checking via Multi-Agent Debate 论文地址:https://arxiv.org/abs/2402.07401https://arxiv.org/abs/2402.07401 1.概述 在数字化时代,对于迅速传播的错误信息,其核实与明…

达梦数据库系列—19. 动态增加实时备库

目录 动态增加实时备库 1、数据准备 2 、配置新备库 2.1配置 dm.ini 2.2配置 dmmal.ini 2.3 配置 dmarch.ini 2.4 配置 dmwatcher.ini 2.5 启动备库 2.6 设置 OGUID 2.7 修改数据库模式 3、 动态添加 MAL 配置 4、 动态添加归档配置 5、 修改监视器 dmmonitor.ini…

windows离线安装显卡驱动解决方案

前言 我们说这个离线泛指计算机无公网环境&#xff0c;而我们需要将显卡驱动打上&#xff0c;既然没有公网&#xff0c;我们就无法使用联网的方式&#xff08;傻瓜式安装&#xff09;&#xff0c;受各种原因限制&#xff0c;也不可以把主机搬走连上互联网进行安装。总之…