C语言案例《猜拳游戏》

《猜拳游戏》

游戏说明

一、游戏简介

本游戏为猜拳对战类游戏,玩家可选择不同对手进行石头、剪刀、布的猜拳对决,支持重复游玩,直至玩家选择退出。

二、游戏流程

  1. 选择对手
    游戏开始后,玩家需从 3 名对手中选择 1 名进行对战,分别为:【1】哪吒、【2】敖丙、【3】敖闰。输入对应数字 1-3 即可完成选择,若输入非数字或超出范围,系统会提示重新输入。
  2. 玩家出拳
    选择对手后,玩家需选择出拳类型:【1】石头、【2】剪刀、【3】布。同样需输入数字 1-3,输入无效时系统会提示修正。
  3. 对手出拳
    玩家出拳后,系统会为所选对手随机生成出拳(1-3 随机,分别对应石头、剪刀、布),确保每局对战的随机性。
  4. 胜负判断
    依据猜拳规则判定结果:
    • 石头胜剪刀,剪刀胜布,布胜石头;
    • 双方出拳相同时为平局。
  5. 继续或退出
    每局结束后,玩家可选择是否继续游戏:输入【Y/y】继续,输入其他字符则退出游戏。

三、操作说明

  • 所有选择均通过键盘输入数字或字符,按回车键确认;
  • 若输入错误(如非数字、超出范围),系统会自动提示并要求重新输入,无需重启游戏。

四、注意事项

  • 游戏使用随机种子初始化,确保每次运行时对手出拳的随机性;
  • 退出游戏后,当前进程结束,需重新启动程序方可再次游玩。

代码


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc,char *argv[])
{// 初始化随种子srand((unsigned)time(NULL));// 游戏主循环控制(默认可以重复玩)int game_running = 1;// 游戏头设置printf("==========================================\n");printf("==========    猜拳游戏 v1.0     ==========\n");printf("==========      作者:d         ==========\n");printf("==========================================\n");// 主循环while(game_running){// 1.选择对手printf("\n---------选择对手-----------\n");// 创建一个变量,用来存储对手应对的序号int opponent;while(1){printf("选择对手:【1】哪吒 【2】敖丙 【3】敖闰\n");// 处理非法输入if (scanf("%d", &opponent) != 1){// 清空输入缓冲区非法字符while (getchar() != '\n');printf("请输入数字1~3!\n");continue;}// 验证输入范围if (opponent >= 1 && opponent <= 3) break;printf("选择无效,请重新输入!\n");}// 显示对手消息,使用const修饰的变量还是变量,只不过不能再次改变const char *opponent_name = opponent == 1 ? "哪吒" : opponent == 2 ? "敖丙" : "敖闰";printf("对手,%s\n",opponent_name);// 2. 玩家出拳printf("------- 玩家出拳 -------\n");// 创建一个变量,用来存储玩家出拳的序号int player_gesture;while(1){printf("请出拳:【1】石头  【2】剪刀  【3】布\n");// 非法输入校验if (scanf("%d", &player_gesture) != 1){// 清空输入缓冲区所有字符while (getchar() != '\n');printf("请输入数字1~3!\n");continue;}// 输入范围校验if (player_gesture >= 1 && player_gesture <= 3) break;printf("无效输入,请重新输入!\n");}// 显示玩家出拳信息const char* player_gesture_name = player_gesture == 1 ? "石头" : player_gesture == 2 ? "剪刀" : "布";printf("您出:%s\n", player_gesture_name);// 3.对手出拳printf("\n-------对手出拳-------\n");// 创建一个变量,作为对手的出拳序列,这个序列需要随机生成1~3int computer_gesture = rand() % 3 + 1;const char* computer_gesture_name = computer_gesture == 1? "石头" : computer_gesture == 2 ? "剪刀" : "布";// 显示对手出拳信息printf("%s 出:%s\n",opponent_name,computer_gesture_name);// 4.判断胜负printf("\n----- 判断胜负 -----\n");// 创建一个变量,用来存储比较的结果int result = (player_gesture - computer_gesture + 3) % 3;printf("战况:");// 比较if (result == 0) printf("平局!\n");else if (result == 2) printf("您赢了!\n");else printf("您输了!\n");//5.游戏退出printf("\n----- 游戏退出 -----\n");printf("继续游戏?【Y/N】");// 清空输入缓冲区while (getchar() != '\n');// 获取控制台输入char choice = getchar(); // 等价于 char choice; scanf("%c", &choice);// 修改循环状态game_running = choice == 'Y' || choice == 'y' ? 1 : 0;}printf("\n游戏结束!\n");return 0;
}

结果示例

在这里插入图片描述

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

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

相关文章

使用python的头文件Matplotlib时plt.show()【标题字体过小】问题根源与解决方案

使用python的头文件Matplotlib时plt.show【标题字体过小】问题根源与解决方案1. 问题复现2. 问题分析3. 解决方案方案一&#xff08;推荐&#xff09;&#xff1a;使用 fig.suptitle 结合 subplots_adjust方案二&#xff1a;以保存文件函数plt.savefig为准方案三&#xff1a;不…

全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石

> 本文将带你深入探索MySQL的进阶CRUD操作与核心约束机制,用设计原则的视角揭示数据库如何保障数据世界的秩序。 ### 一、进阶CRUD:数据操作的精密工具 #### 1. 精准筛选:WHERE子句的深度运用 ```sql -- 基础筛选:价格大于50的菜品 SELECT * FROM dishes WHERE pric…

使用Redis实现MySQL的数据缓存

使用Redis来实现/mySQL的数据缓存的架构1&#xff1a;目标数据从mySQL读取数据或者从Redis读取数据 2&#xff1a;使用cannal监控mySQL&#xff1a;canal-server可以对mysql的blog实行拉取&#xff0c;可以拉去blog里面的(增&#xff0c;删&#xff0c;改等操作&#xff0c;查询…

linux配置ntp时间同步

目录 1.设置时区 2.安装chrony时间同步工具 3.修改chrony配置文件,添加阿里云NTP服务器作为时钟源 4.重启chrony服务&#xff0c;并查看同步结果 1.设置时区 timedatectl set-timezone Asia/Shanghai 2.安装chrony时间同步工具 apt install chrony -y&#xff08;dnf ins…

powershell 实现批量把文件夹下的bmp文件转换为jpg

以下是一个使用PowerShell将BMP图像批量转换为JPG&#xff08;质量85&#xff09;的脚本&#xff1a; <# .SYNOPSIS批量将BMP图像转换为JPG格式&#xff08;质量85&#xff09; .DESCRIPTION此脚本会遍历指定文件夹中的所有BMP文件&#xff0c;并将它们转换为JPG格式&#x…

星图云开发者平台新功能速递 | 页面编辑器:全场景编辑器,提供系统全面的解决方案

在数字化转型的浪潮下&#xff0c;高效的低代码开发工具成为企业和开发者的刚需&#xff0c;其需要针对Web、APP、H5等不同终端快速构建应用。但不同场景的开发往往需要不同的工具和技术栈&#xff0c;导致开发效率低、协作成本高。星图云开发者平台创新推出多类型页面专用编辑…

激活函数Focal Loss 详解​

Focal Loss 详解​1. 背景​Focal Loss 是由 Lin et al. (2017) 在论文 《Focal Loss for Dense Object Detection》 中提出的一种损失函数&#xff0c;主要用于解决 目标检测&#xff08;Object Detection&#xff09; 中的 类别不平衡问题&#xff0c;特别是在 One-Stage 检测…

Python 链接各种中间件[Mysql\redis\mssql\tdengine]

文章目录链接参数设置logger 日志redis 链接mysql 链接emqx 链接mssql 链接tdengine 链接采集OPCUA的点表的配置信息设备点表OPCUA 采集 数据程序数据采集逻辑链接参数 import randomtdengine_connection_params {username: root,password: taosdata,host: 127.0.0.1,port: 6…

C Primer Plus 第6版 编程练习——第11章(上)

本章共16题&#xff0c;分上中下三篇1.设计并测试一个函数&#xff0c;从输入中获取n个字符&#xff08;包括空白、制表符、换行符)&#xff0c;把结果存储在一个数组里&#xff0c;它的地址被传递作为一个参数。int get_n_char(char arr[], int n) {int i 0;char ch;while (i…

Java开发岗面试记录合集

一、Java 核心1. 基础语法final关键字的作用修饰类&#xff1a;类不可被继承&#xff08;如String类&#xff09;&#xff0c;保证类的稳定性和安全性。修饰方法&#xff1a;方法不可被重写&#xff08;防止子类篡改父类核心逻辑&#xff0c;如工具类方法&#xff09;。修饰变量…

Linux 系统时间设置(date 和 ntpdate)-linux028

date 命令&#xff1a;查看或设置系统时间1. 查看当前时间date示例输出&#xff1a;Tue Mar 4 01:36:45 CST 20142. 设置时间&#xff08;不设置日期&#xff09;date -s 09:38:40设置后输出&#xff1a;Tue Mar 4 09:38:40 CST 20143. 设置完整日期和时间&#xff08;推荐格…

iOS上使用WebRTC推拉流的案例

一、库集成 首先&#xff0c;确保在你的 Podfile 中添加依赖&#xff1a; pod GoogleWebRTC然后执行 pod install 安装库。 二、代码示例 2.1、权限配置&#xff1a;在 Info.plist 中添加摄像头、麦克风权限 <!-- 需要在 Info.plist 中添加以下权限 --> <key>NSCam…

API: return response as HTML table

想要把response table变成HTML的table&#xff0c;即想达到下面这种的话<table boarder"1" style"width:100%; boarder-collapse: collapse; text-align:left"><tr><th>Customer</th><th>Date</th><th>Debit Am…

OneNote 当前无法同步笔记。将继续尝试。 (错误代码: 0xE00009C8 bb0ur)问题解决

之前因为同步错误&#xff0c;导致OneNote一个笔记本内容全部消失&#xff0c;笔记本内容如下图同步状态和错误如下&#xff1a;提醒错误为&#xff1a;OneNote 当前无法同步笔记。将继续尝试。 (错误代码: 0xE00009C8 bb0ur)当时心态有点崩&#xff0c;也是查了好些资料&#…

OneCode3.0 Gallery 组件前后端映射机制:从注解配置到前端渲染的完整链路

一、注解体系与前端组件的映射基础 ​ OneCode Gallery 组件实现了 Java 注解与前端 UI 组件的深度绑定&#xff0c;通过GalleryAnnotation、GalleryItemAnnotation和GalleryViewAnnotation三个核心注解&#xff0c;构建了从后端配置到前端渲染的完整链路。这种映射机制的核心价…

规则分配脚本

需求&#xff1a; 1.根据用户编写的要报规则,去mysql库里SysManage_Rule表获取已经启用的规则作为条件&#xff08;例如[{“field”: “关键词”, “logic”: “AND”, “value”: “阿尔法”, “operator”: “”&#xff0c;, “assign_user”: “user222”}]&#xff09;条…

SEO实战派白杨SEO:SEO中说的框计算、知心搜索(知识图谱)是什么?有什么用处?

SEO里框计算是什么&#xff1f;有什么用处&#xff1f;SEO里框计划算是百度2010年提出的&#xff0c;指当用户搜索某些关键词查询时&#xff0c;搜索引擎在结果页直接展示答案的技术&#xff08;如天气、汇率等&#xff09;&#xff0c;用户无需点击网站即可获取信息&#xff0…

软件工程:软件需求

简介本篇博客记录了我在软件工程学习过程中关于软件需求与面向对象基础知识的学习体会和要点总结。博客共分为三个关卡内容&#xff1a;第1关围绕“软件需求”的定义、分类及分析过程展开&#xff0c;让我清晰地理解了功能性需求、非功能性需求与约束条件的区别&#xff1b;第2…

MES系统是什么,有哪些特性?

MES系统是一套面向制造企业车间执行层的生产信息化管理系统。它能够为操作人员和管理人员提供计划的执行、跟踪以及所有资源&#xff08;包括人、设备、物料、客户需求等&#xff09;的当前状态。通过MES系统可以对从订单下达到产品完成的整个生产过程进行优化管理。当工厂发生…

Vue2下

六&#xff1a;vue-router &#xff08;重要&#xff09; &#xff08;一&#xff09;. 对路由的理解 1.什么是路由 路由&#xff08;Router&#xff09; 是管理页面跳转和 URL 与视图映射关系的机制&#xff0c;核心作用是&#xff1a;根据不同的 URL 路径&#xff0c;展示对…