石頭剪刀布游戲

自己寫的一個石頭剪刀布游戲,如果有需要更改的地方請指出

#define _CRT_SECURE_NO_WARNINGS // scanf_s編寫起來太過于麻煩,直接把這個警告關掉,便于編寫。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定義猜拳選項
#define Rock 1
#define Paper 2
#define Scissors 3
void rules() {printf("歡迎參加剪刀石頭布游戲\n石頭:1,布:2,剪刀:3\n");//先進行游戲介紹printf("提醒:因為srand函數是秒級的,請注意輸入數字的時候不要過快哦,不然就會導致電腦只出一個招式。\n");//提醒srand的注意事項
}
int choice() {int choice;if (scanf("%d", &choice) != 1 || choice < 1 || choice > 3) {printf("輸入無效,請輸入1到3的數字。\n");return -1;}return choice;
}
int comchoice() {srand((unsigned)time(NULL)); // 利用隨機數保證每次電腦出的結果不同return rand() % 3 + 1; // rand % 3 的范圍是0-2, 加1 是 1-3,滿足猜拳范圍。
}
void printChoice(int choice, const char* prefix) {switch (choice) {case Rock:printf("%s石頭", prefix);break;case Paper:printf("%s布", prefix);break;case Scissors:printf("%s剪刀", prefix);break;}
}
int winner(int userChoice, int comChoice) {if (userChoice == comChoice) {printf("平局!你和電腦都出了 ");printChoice(userChoice, "");return 0; // 平局返回0}else if (((userChoice == Rock && comChoice == Scissors) ||(userChoice == Paper && comChoice == Rock) ||(userChoice == Scissors && comChoice == Paper))) {printf("你贏了!你出了 ");printChoice(userChoice, "");printf(",電腦出了 ");printChoice(comChoice, "");return 1; // 用戶贏返回1}else {printf("你輸了!你出了 ");printChoice(userChoice, "");printf(",電腦出了 ");printChoice(comChoice, "");return -1; // 用戶輸返回-1}
}
int main() {int totalgames, win, userwin = 0, comwin = 0;rules();while (1) { // 循環直至獲取有效輸入printf("請輸入比賽局數(總局數必須為整數且為奇數): ");if (scanf("%d", &totalgames) != 1 || totalgames % 2 == 0) { // 檢查輸入是否為整數以及是否為奇數printf("無效輸入,總局數必須為奇數。\n");//輸入無效,循環繼續}break; // 成功獲取有效輸入,退出循環}win = (totalgames / 2) + 1;for (int i = 0; i < totalgames;) {printf("\n第%d局開始:\n", i + 1);int userChoice, computerChoice, result;while ((userChoice = choice()) == -1); // 確保輸入有效computerChoice = comchoice();result = winner(userChoice, computerChoice);if (result == 1) {userwin++;i++; // 只有當結果不是平局時才增加局數計數器}else if (result == -1) {comwin++;i++; // 同上}// 如果一方達到獲勝條件,則提前結束if (userwin >= win || comwin >= win) break;}printf("\n最終結果: ");if (userwin >= win) printf("恭喜你贏得了比賽!");else if (comwin >= win) printf("很遺憾,電腦贏得了比賽。");else printf("比賽結束,未分勝負。");return 0;
}
}

在這里插入圖片描述
這是運行的結果。
可以自己寫一寫,很鍛煉coding能力。

#define _CRT_SECURE_NO_WARNINGS // scanf_s編寫起來太過于麻煩,直接把這個警告關掉,便于編寫。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定義猜拳選項
#define Rock 1
#define Paper 2
#define Scissors 3
void rules() {printf("歡迎參加剪刀石頭布游戲\n石頭:1,布:2,剪刀:3\n");//先進行游戲介紹printf("提醒:因為srand函數是秒級的,請注意輸入數字的時候不要過快哦,不然就會導致電腦只出一個招式。\n");//提醒srand的注意事項
}
int choice() {int choice;if (scanf("%d", &choice) != 1 || choice < 1 || choice > 3) {printf("輸入無效,請輸入1到3的數字。\n");return -1;}return choice;
}
int comchoice() {srand((int)time(NULL));// 利用隨機數保證每次電腦出的結果不同return rand() % 3 + 1; // rand % 3 的范圍是0-2, 加1 是 1-3,滿足猜拳范圍。
}
int printAndDecideWinner(int userChoice, int comChoice) {if (userChoice == comChoice) {printf("平局!你和電腦都出了 ");switch (userChoice) {case Rock:printf("石頭");break;case Paper:printf("布");break;case Scissors:printf("剪刀");break;}return 0;//返回0,便于在主函數時操作}else if (((userChoice == Rock && comChoice == Scissors) ||(userChoice == Paper && comChoice == Rock) ||(userChoice == Scissors && comChoice == Paper))) {printf("你贏了!你出了 ");switch (userChoice) {case Rock:printf("石頭");break;case Paper:printf("布");break;case Scissors:printf("剪刀");break;}printf(",電腦出了 ");switch (comChoice) {case Rock:printf("石頭");break;case Paper:printf("布");break;case Scissors:printf("剪刀");break;}return 1;//返回1到主函數操作}else {printf("你輸了!你出了 ");switch (userChoice) {case Rock:printf("石頭");break;case Paper:printf("布");break;case Scissors:printf("剪刀");break;}printf(",電腦出了 ");switch (comChoice) {case Rock:printf("石頭");break;case Paper:printf("布");break;case Scissors:printf("剪刀");break;}return -1;//同理}
}
int main() {int totalgames, win, userwin = 0, comwin = 0;rules();while (true) {//一直循環直到獲得有效輸出printf("請輸入比賽局數(總局數必須為整數且為奇數): ");if (scanf("%d", &totalgames) != 1 || totalgames % 2 == 0) {// 檢查輸入是否為整數以及是否為奇數printf("無效輸入,總局數必須為奇數。\n");//輸入無效,循環繼續}else {break; //成功獲取有效輸入,退出循環}}win = (totalgames / 2) + 1;for (int i = 1; i <= totalgames;) {// 確保輸入有效(如果return的值是-1的話,會一直讓用戶輸入值)printf("\n第%d局開始:\n", i);int userchoice, computerchoice, result;userchoice = choice();computerchoice = comchoice();while (userchoice == -1) {userchoice = choice();computerchoice = comchoice();}result = printAndDecideWinner(userchoice, computerchoice);if (result == 1) {userwin++;i++;// 只有當結果不是平局時才增加局數計數器}else if (result == -1) {comwin++;i++; // 同上}if (userwin >= win || comwin >= win) // 如果一方達到獲勝條件,那就提前結束。break;}printf("\n最終結果: ");if (userwin >= win)printf("恭喜你贏得了比賽!");else if (comwin >= win)printf("很遺憾,電腦贏得了比賽。");elseprintf("比賽結束,未分勝負。");return 0;
}

修改過的第二版方法。更通俗易懂,用switch case 一個函數實現所有

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75922.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據系列之:Kerberos

大數據系列之&#xff1a;Kerberos 基本概念工作流程安全特性應用場景總結加密原理Kerberos認證流程更改您的密碼授予賬戶訪問權限票證管理Kerberos 票據屬性使用 kinit 獲取票據使用 klist 查看票據使用 kdestroy 銷毀票據.k5identity 文件描述 Kerberos 是一種網絡認證協議&a…

WPF 免費UI 控件HandyControl

示例效果和代碼 直接可以用 Button 按鈕 | HandyOrg 1.安裝 , 輸入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …

windows部署docker

1.下載docker 打開瀏覽器&#xff0c;訪問 Docker Desktop 下載頁面。 2.安裝 Docker Desktop 運行安裝程序&#xff1a; 雙擊下載的 Docker Desktop 安裝包&#xff0c;啟動安裝程序。 選擇安裝選項&#xff1a; 按照屏幕上的指示進行操作。建議選擇默認選項&#xff0c;包…

【Linux】遠程登錄時,使用圖形界面報錯:MoTTY X11 proxy: Unsupported authorisation protocol

1、問題描述 使用 MobaXterm 遠程登錄Ubuntu后,使用sudo權限運行圖形界面程序報錯: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服務端配置,…

解決 Hugging Face SentenceTransformer 下載失敗的完整指南:ProxyError、SSLError與手動下載方案

問題背景 在使用 Hugging Face 的 SentenceTransformer 加載預訓練模型 all-MiniLM-L6-v2 時&#xff0c;遇到了以下錯誤&#xff1a; 代理連接失敗&#xff08;ProxyError / SSLError: KRB5_S_TKT_NYV&#xff09;大文件下載中斷&#xff08;unexpected EOF while reading&a…

MySQL——DQL的單表查詢

1、查詢表中所有的字段&#xff08;列&#xff09; 語法&#xff1a;select * from 表名; * 是通配符&#xff0c;用來表示所有的字段&#xff08;列&#xff09;。 select 表示查詢哪些列。 from 表示從哪張表中查詢。 2、查詢表中指定的字段 語法&#xff1a;select 列…

開源RuoYi AI助手平臺的未來趨勢

近年來&#xff0c;人工智能技術的迅猛發展已經深刻地改變了我們的生活和工作方式。 無論是海外的GPT、Claude等國際知名AI助手&#xff0c;還是國內的DeepSeek、Kimi、Qwen等本土化解決方案&#xff0c;都為用戶提供了前所未有的便利。然而&#xff0c;對于那些希望構建屬于自…

[WUSTCTF2020]CV Maker1

進來是個華麗的界面&#xff0c;我們先跟隨這個網頁創造一個用戶 發現了一個上傳端口&#xff0c;嘗試上傳一個php文件并抓包 直接上傳進不去&#xff0c;加個GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 傳入 并且報告了 上傳路徑&#xff0c;然后使用蟻劍連接

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定義&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反轉&#xff09; 是一種設計思想&#xff1a;對象不再由你自己創建和管理&#xff0c;而是交給 Spring 容器…

Vue2-實現elementUI的select全選功能

文章目錄 使用 Element UI 的全選功能自定義選項來模擬全選 在使用 Element UI 的 el-select組件時&#xff0c;實現“全選”功能&#xff0c;通常有兩種方式&#xff1a;一種是使用內置的全選功能&#xff0c;另一種是通過自定義選項來模擬全選。 使用 Element UI 的全選功能…

小菜Go:Ubuntu下Go語言開發環境搭建

前置要求Ubuntu環境搭建 文章推薦 此處推薦一個比較好的文章&#xff0c;基本按部就班就歐克~ 安裝虛擬機&#xff08;VMware&#xff09;保姆級教程&#xff08;附安裝包&#xff09;_vmware虛擬機-CSDN博客 安裝可能遇到的問題 虛擬機安裝遇到的問題如&#xff1a;Exception…

安卓中app_process運行報錯Aborted,怎么查看具體的報錯日志

我在pc端生成了一個jar包&#xff0c;可以正常執行&#xff0c;但是導入到安卓的/data/local/tmp下面執行就會報錯 執行命令如下&#xff1a; adb shell cd /data/local/tmp app_process -Djava.class.path/data/local/tmp/demo.jar /data/local/tmp com.example.demo.Hello然…

Python 面向對象 - 依賴倒置原則 (DIP)

1. 核心概念 依賴倒置原則(Dependency Inversion Principle, DIP) 是SOLID原則中的"D"&#xff0c;包含兩個關鍵點&#xff1a; 高層模塊不應依賴低層模塊&#xff0c;二者都應依賴抽象抽象不應依賴細節&#xff0c;細節應依賴抽象 2. 使用場景 典型應用場景 系…

centos7 yum install docker 安裝錯誤

1、錯誤信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加載插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…

【Gorm】模型定義

intro package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite" // GORM 使用該驅動來連接和操作 SQLite 數據庫。 )type Product struct {gorm.Model // 嵌入GORM 內置的模型結構&#xff0c;包含 ID、CreatedAt、UpdatedAt、DeletedAt 四個字段Cod…

R語言從專家到小白

文章目錄 下載安裝R下載安裝R StudioCRAN 下載安裝R Index of /bin https://cran.r-project.org/ 下載安裝R Studio https://posit.co/download/rstudio-desktop/ CRAN R綜合檔案網絡。 CRAN 鏡像是一個提供 R 語言軟件和包的在線服務&#xff0c;用戶可以從不同的地區選擇…

Java的Selenium的特殊元素操作與定位之時間日期控件

分為兩種情況: 控件沒有限制手動輸入&#xff0c;則直接調用sendKeys方法寫入時間數據 //時間日期控件處理 chromeDriver.get ("https://www,fliggy,com/?ttidsem.000000736&hlreferidbaidu.082076&route sourceseo"); chromeDriver.findElement (By.xpat…

38常用控件_QWidget的enable屬性(2)

實現用另一個按鈕切換之前按鈕的“可用”狀態 在同一個界面中,要求不同的控件的 objectName 也是必須不同的.(不能重復&#xff09; 后續就可以通過 ui->objectName 方式來獲取到對應的控件對象了 ui->pushButton // 得到了第一個按鈕對應的對象 ui->pushButton 2 //…

【Linux學習筆記】初識進程概念和進程PCB

【Linux學習筆記】初識馮諾依曼體系和進程PCB &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】初識馮諾依曼體系和進程PCB前言一. 馮諾依曼體系結構1.1 關于馮諾依曼體系的要點&#xff1a; 二. 操…

7.3 主成分分析(PCA)

一、協方差矩陣 這節是介紹 SVD 在統計和數據分析中的一個主要應用&#xff0c;即主成分分析。例子來自于人類的基因組&#xff0c;臉部識別和金融&#xff0c;目的是理解一個大的數據矩陣&#xff08;測量值&#xff09;。對于 n n n 個樣本&#xff0c;我們每個測量 m m m…