利用C語言編寫“剪刀石頭布”小游戲
前言
大家好~
我是一名C語言初學(xué)者,學(xué)了C語言基礎(chǔ)后,我制作了一個(gè)小游戲:剪刀石頭布。
希望大家能對(duì)我的思路和代碼提出小Tips(eg.更簡(jiǎn)便的方法與程序)
我也會(huì)虛心接受大家的建議~
一、游戲原理
“剪刀石頭布”這個(gè)游戲,想必大家都很熟悉了。
兩個(gè)人在玩游戲時(shí),事先都不知道對(duì)方將要出什么,這中間存在著一種隨機(jī)性。
而這種隨機(jī)性相當(dāng)于C語言里stdlib.h庫中rand()函數(shù),rand()函數(shù)用來產(chǎn)生隨機(jī)數(shù),因?yàn)閞and是根據(jù)提供給srand()的種子值返回一個(gè)隨機(jī)數(shù),所以要使每次隨機(jī)的結(jié)果不一樣,需要在srand()函數(shù)里引用time()函數(shù),因?yàn)槊恳淮芜\(yùn)行程序的時(shí)間是不同的,所以seed會(huì)不同,運(yùn)行出來的結(jié)果也會(huì)不同。
補(bǔ)充:
rand()的內(nèi)部實(shí)現(xiàn)是用線性同余法實(shí)現(xiàn)的,是偽隨機(jī)數(shù),由于周期較長(zhǎng),因此在一定范圍內(nèi)可以看成是隨機(jī)的。
rand函數(shù)需要有srand()函數(shù)用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。
參數(shù)seed是整數(shù),通??梢岳胻ime(0)或geypid(0)的返回值作為seed。
首先將游戲者(gamer)的選項(xiàng)輸入,并用switch分三種情況,將輸入的A、B、C(或a、b、c)轉(zhuǎn)換為整數(shù)(Gamer),然后用rand函數(shù)在1-3中隨機(jī)產(chǎn)生一個(gè)整數(shù)來代表計(jì)算機(jī)(computer)的選項(xiàng),再將兩個(gè)整數(shù)相加,最后用switch來分類討論,輸出結(jié)果。
(因水平有限,我目前只能想到用這種方法來判斷勝負(fù),所以要避免兩種不同情況相加出的結(jié)果相同)
二、C語言代碼
1.引入函數(shù)
代碼如下:
#include "stdio.h" #include "stdlib.h" #include "time.h"
2.初始頁面顯示
代碼如下:
int main()
{
char Gamer=0;
int computer,gamer;
int result;
while (1)
{
printf("這個(gè)小游戲是——剪刀石頭布,\n你要出:\n");
printf("A:剪刀\nB:石頭\nC:布\n");
scanf_s("%c", &Gamer);
switch (Gamer)
{
case 65 | 97: //A a
gamer = 4;
break;
case 66 | 98: //B b
gamer = 7;
break;
case 67 | 99: //C c
gamer = 10;
break;
default:
printf("你的選擇為%c\n選擇錯(cuò)誤,退出...\n", Gamer);
system("pause");
return 0;
break;
}
3.游戲過程及結(jié)果
srand((unsigned)time(0));//每一次的seed都不同
computer = rand() % 3+1;
result = gamer + computer;
printf("電腦出了:");
switch (computer)
{
case 3:printf("剪刀\n"); break;
case 1:printf("石頭\n"); break;
case 2:printf("布\n"); break;
}
printf("你出了:");
switch (gamer)
{
case 4:printf("剪刀\n"); break;
case 7:printf("石頭\n"); break;
case 10:printf("布\n"); break;
}
if (result == 6 || result == 10 || result == 11)
printf("你贏了!");
else if (result == 5 || result == 9 || result == 13)
printf("電腦贏了!");
else
printf("平手");
system("pause>nul&&cls"); //清屏
}
return 0;
}
總結(jié)
以上就是有關(guān)于游戲的思路和代碼,編寫程序前,我查閱了一些資料,并且詢問了他人,在這個(gè)過程中,我有學(xué)到許多新知識(shí).
但是因?yàn)樗接邢蓿绦虼a還是很繁瑣,方法也不是最好的,希望能通過進(jìn)一步的學(xué)習(xí),開拓自己的思路,用更快捷的方法編寫程序。
到此這篇關(guān)于利用C語言編寫“剪刀石頭布”小游戲的文章就介紹到這了,更多相關(guān)C語言寫剪刀石頭布游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?OpenCV技術(shù)實(shí)戰(zhàn)之身份證離線識(shí)別
OpenCV身份證離線識(shí)別技術(shù)的主要技術(shù)就是通過OpenCV找到身份證號(hào)碼區(qū)域,然后通過OCR進(jìn)行數(shù)字識(shí)別該區(qū)域的截圖即可得到身份證號(hào)碼。感興趣的可以了解一下2021-12-12
C++實(shí)現(xiàn)動(dòng)態(tài)順序表(vector)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
C語言?超詳細(xì)介紹與實(shí)現(xiàn)線性表中的無頭單向非循環(huán)鏈表
無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡(jiǎn)單,一般不會(huì)單獨(dú)用來存數(shù)據(jù)。實(shí)際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在筆試面試中出現(xiàn)很多2022-03-03
C++實(shí)現(xiàn)LeetCode(95.獨(dú)一無二的二叉搜索樹之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(95.獨(dú)一無二的二叉搜索樹之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

