当前位置: 首页 > news >正文

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

	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");}elseprintf("平局\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");}}elseprintf("坐标非法,请重新输!\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)

相关文章:

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

switch(input){case 1:printf("三子棋\n");//这里先测试是否会执行成功break;case 0:printf("退出游戏\n");break;default :printf("选择错误&#xff0c;请重新选择!\n");break;}}while(input);//直到输入的结果为假&#xff0c;循环才会结束} …...

如何利用AI生成可视化图表(统计图、流程图、思维导图……)免代码一键绘制图表

由于目前的AI生成图表工具存在以下几个方面的问题&#xff1a; 大多AI图表平台是纯英文&#xff0c;对国内用户来说不够友好&#xff1b;部分平台在生成图表前仍需选择图表类型、配置项&#xff0c;操作繁琐&#xff1b;他们仍需一份规整的数据表格&#xff0c;需要人为对数据…...

Firefox 编译指南2024 Windows10-使用Git 管理您的Firefox(五)

1. 引言 在现代软件开发中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;它不仅帮助开发者有效管理代码的变化&#xff0c;还支持团队协作与项目管理。Mercurial 是一个高效且易用的分布式版本控制系统&#xff0c;其设计目标是简洁、快速…...

ubuntu 18 虚拟机安装(1)

ubuntu 18 虚拟机安装 ubuntu 18.04.6 Ubuntu 18.04.6 LTS (Bionic Beaver) https://releases.ubuntu.com/bionic/ 参考&#xff1a; 设置固定IP地址 https://blog.csdn.net/wowocpp/article/details/126160428 https://www.jianshu.com/p/1d133c0dec9d ubuntu-18.04.6-l…...

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

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

XStream导出xml文件

最终效果 pom依赖 <dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.11.1</version></dependency>代码 XStreamUtil 这个直接复制即可 import com.thoughtworks.xst…...

陪诊小程序搭建:构建便捷医疗陪诊服务的创新实践

在当今快节奏的社会&#xff0c;医疗服务与人们的生活息息相关。然而&#xff0c;在医疗体系中&#xff0c;患者往往面临着信息不对称、流程繁琐、陪伴需求得不到满足等问题。为了解决这些问题&#xff0c;我们提出了一种创新的解决方案——陪诊小程序&#xff0c;旨在为患者提…...

0139__TCP协议

全网最详细TCP参数讲解&#xff0c;再也不用担心没有面试机会了_tcp的参数-CSDN博客 TCP协议详解-腾讯云开发者社区-腾讯云 TCP-各种参数 - 简书...

家政小程序的开发,带动市场快速发展,提高家政服务质量

当下生活水平逐渐提高&#xff0c;也增加了年轻人的工作压力&#xff0c;同时老龄化也在日益增加&#xff0c;使得大众对家政的需求日益提高&#xff0c;能力、服务质量高的家政人员能够有效提高大众的生活幸福指数。 但是&#xff0c;传统的家政服务模式存在着效率低、用户与…...

JavaScript高级程序设计(第四版)--学习记录之对象、类与面向对象编程(下)

类 ES6新引入class关键字具有正式定义类的能力。 类定义&#xff1a;类声明和类表达式。 // 类声明 class Person {} // 类表达式 const Animal class {}; 类定义与函数定义的不同&#xff1a; 1&#xff1a;函数声明可以提升&#xff0c;类定义不能 2&#xff1a;函数受函数…...

PDF 生成(5)— 内容页支持由多页面组成

当学习成为了习惯&#xff0c;知识也就变成了常识。 感谢各位的 关注、点赞、收藏和评论。 新视频和文章会第一时间在微信公众号发送&#xff0c;欢迎关注&#xff1a;李永宁lyn 文章已收录到 github 仓库 liyongning/blog&#xff0c;欢迎 Watch 和 Star。 回顾 在本篇开始…...

day 51 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s "rabbbit", t "rabbit" 输出&#xff1a;3 解释&#xff1a; 如下所示,…...

http包详解

http包的作用及使用 go的http包是go的web编程的核心内容&#xff0c;go的web框架本质上都是基于http提供的组件进行再度封装。我们来看一下http基本的使用&#xff1a; func main() {http.Handle("/get", GetVal())http.Handle("/hello", Hello())http.H…...

Reqable实战系列:Flutter移动应用抓包调试教程

Flutter应用网络请求调试一直是业内难题&#xff0c;原因在于Dart语言标准库的网络请求不会走Wi-Fi代理&#xff0c;常规通过配置Wi-Fi代理来抓包的方式行不通。这给我们日常开发测试造成了很大的阻碍&#xff0c;严重降低工作效率。因此写一篇教程&#xff0c;讲解如何使用Req…...

乾元通渠道商中标吴忠市自然灾害应急能力提升项目

近日&#xff0c;乾元通渠道商中标宁夏回族自治区吴忠市自然灾害应急能力提升项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据…...

护网蓝队面试

一、sql注入分类 **原理&#xff1a;**没有对用户输入项进行验证和处理直接拼接到查询语句中 查询语句中插⼊恶意SQL代码传递后台sql服务器分析执行 **从注入参数类型分&#xff1a;**数字型注入、字符型注入 **从注入效果分&#xff1a;**报错注入、布尔注入、延时注入、联…...

【高考志愿】金融学

目录 一、金融学类专业概述 二、主要课程 三、就业前景与方向 四、适合人群 五、金融学学科排名 六、总结 高考志愿选择金融学&#xff0c;无疑是一个既充满挑战又极具前景的决策。金融学&#xff0c;作为经济学门类下的重要分支&#xff0c;不仅涵盖了广泛的金融领域知识…...

返利App的用户行为分析与数据驱动决策

返利App的用户行为分析与数据驱动决策 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨返利App中的用户行为分析与数据驱动决策的技术细节和实…...

python基础:高级数据类型:集合

1、集合的定义 集合是一个无序且无重复元素的列表。其定义与数学定义一致。其无序和不重复和字典特征类似&#xff0c;但是无“值”。 2、集合的创建 集合一般由列表创建&#xff0c;在初始化列表时保证其元素唯一性&#xff0c;即为集合。 创建方法&#xff1a;x set(list…...

idk17配置

只需要把zip包解压&#xff0c;然后配置环境变量&#xff1a; bin目录路径粘到path里面就好了 然后打开cmd窗口分别输入 java javac java -version 验证...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...