網站首頁 編程語言 正文
一、游戲邏輯
1.打印選擇菜單(1.play,0.exit)
2.提示玩家0、1、2 分別代表石頭、剪刀、布
3.設置與計算機博弈次數
4.為計算機設置出拳(調用rand()函數生成0、1、2其中一個隨機數)
5.玩家出拳
6.判斷輸贏
7.展示玩家和計算機出的拳
8.若退出游戲展示玩家勝負與平局信息
二、思維導圖
三、游戲過程
四、代碼分析
1.設置隨機數的方法
僅僅使用rand()函數來生成隨機數是不行的,因為它每玩一次生成的隨機數都是相同的,即隨機數不隨機,所以要通過srand()函數,種下一個隨機種子,來產生隨機數。根據時間每時每刻都是變化的,可以用time()時間函數來產生種子。
這里 time_t 的類型就是在C語言中被定義為長整型,而srand()函數的參數類型unsignedint(無符號整形),所以使用時要強制類型轉換,而且**time()**函數,不需要設置參數,故用NULL代替。
2.設置計算機出拳的方法
comp = rand() % 3;
調用 rand() 函數 %3 就可以得到有個0~2之間的數值
3.判斷輸贏的方法
據圖可以看出只需要判斷 (human - comp + 3) % 3 的值是 0、1 還是 2 就可以判斷是平局、計算機贏還是電腦贏。
代碼示例:
void disp_result(is_winer)
{
switch (is_winer)
{
case 0:
printf("平局\n");
draw++;//平局次數加1
break;
case 1:
printf("計算機贏\n");
lose++;//失敗次數加1
break;
case 2:
printf("玩家贏\n");
win++;//獲勝次數加1
break;
}
}
is_winer 中存放的是 (human - comp + 3) % 3 的值,利用 switch 語句判斷其結果,再輸出對應的語句。變量draw、lose、win是用來統計玩家戰績信息。
4.玩家猜拳
控制玩家輸入的范圍是0~2之間的數值
倘若玩家輸入的數值不是0~2之間的,程序就無法正常運行了,所以要控制范圍。
可以利用do while循環來達到此目的。
代碼示例:
do
{
scanf("%d", &human);//玩家出拳
printf("\n");
if (human < 0 || human > 2)
{
printf("輸入錯誤,重新輸入\n");
}
is_winer = (human - comp + 3) % 3;
disp_result(is_winer);//判斷輸贏的函數
Dishumanplayer(human);//展示玩家出的拳
Discomplayer(comp);//展示計算機出拳
} while (human < 0 || human > 2);//控制玩家輸出范圍是0~2
if 語句的作用是用來當玩家輸入的數值超過了范圍時,對其進行提示輸入錯誤。
五、完整代碼
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int draw = 0;//統計平局數
int lose = 0;//統計失敗數
int win = 0;//統計獲勝數
int human = 0;//玩家手勢
int comp = 0;//計算機手勢
int is_winer = 0;//判斷勝負
void menu()
{
printf("****************************************\n");
printf("*************** 猜拳游戲 ***************\n");
printf("****************************************\n");
printf("*************** 1.play ****************\n");
printf("*************** 0.exit ****************\n");
printf("****************************************\n");
}
void Displayer(int comp, int human)//展示計算機和玩家出拳的函數
{
printf("計算機出的是:");
switch (comp)
{
case 0:
printf("石頭\n");
break;
case 1:
printf("剪刀\n");
break;
case 2:
printf("布\n");
break;
}
printf("玩家出的是:");
switch (human)
{
case 0:
printf("石頭\n");
break;
case 1:
printf("剪刀\n");
break;
case 2:
printf("布\n");
break;
}
}
//判斷輸贏
void disp_result(is_winer)
{
switch (is_winer)
{
case 0:
printf("平局\n");
draw++;//平局次數加1
break;
case 1:
printf("計算機贏\n");
lose++;//失敗次數加1
break;
case 2:
printf("玩家贏\n");
win++;//獲勝次數加1
break;
}
}
void game()
{
printf("(0)-石頭,(1)-剪刀,(2)-布\n");
printf("猜拳游戲開始!!!\n");
int number = 0;//猜拳次數
printf("請選擇猜拳次數:");
scanf("%d", &number);
while (number)
{
comp = rand() % 3;//計算機出拳
printf("玩家出拳:");
do
{
scanf("%d", &human);//玩家出拳
printf("-----------猜拳游戲-------------\n");
if (human < 0 || human > 2)
{
printf("輸入錯誤,重新輸入\n");
}
is_winer = (human - comp + 3) % 3;
disp_result(is_winer);//判斷輸贏的函數
Displayer(comp, human);//展示出拳
} while (human < 0 || human > 2);//控制玩家輸出范圍是0~2
number--;
}
}
int main()
{
srand((int)time(NULL));
int input = 0;
do
{
menu();
printf("選擇玩游戲還是退出游戲!!!\n");
printf("請選擇:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤,重新選擇\n");
break;
}
} while (input);
//展示玩家成績
printf("\a\n%d平 %d敗 %d勝\n", draw, lose, win);
return 0;
}
原文鏈接:https://blog.csdn.net/m0_63033419/article/details/124832992
相關推薦
- 2023-07-08 vscode上查看git的記錄,可以看到是誰多久前修改的代碼
- 2022-04-28 C#委托用法詳解_C#教程
- 2022-05-21 云原生要素配置分離ConfigMap創建方式_云其它
- 2022-05-21 Unity利用XML制作一個簡易的登錄系統_C#教程
- 2022-11-14 React前端路由應用介紹_React
- 2022-05-31 openCV顯著性檢測的使用_python
- 2023-04-14 jupyter-lab設置自啟動及遠程連接開發環境_python
- 2022-12-24 fetch()函數說明與使用方法詳解_基礎知識
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支