游戲呢,總體思路就是系統隨機生成一個數字,然后玩家去猜這個數字,等到如果玩家猜錯到一定次數時,可以相應的一些懲罰,比如關機,或者讓玩家做一些限定的事情來防止關機,
需要用到的頭檔案:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<string.h>
首先呢,我們既然做游戲,得有一個選單,供玩家選擇,這是一個函式
第二呢,就是玩家選擇開始游戲時,對游戲總思路進行設計的一個函式,
第三,就是懲罰函式,當玩家錯誤到一定次數時,實行懲罰的一個函式,
我們分別用到如下三個函式,
void meau();
void game();
void punish();
還有一個main主函式
程式從main主函式開始,我們每一次開始都需要呼叫一下選單,需要玩家進行輸入,然后選單里每一個數字都對應著一個功能,我們可以用switch函式,而且每一次游戲結束之后都要再呼叫選單,所以我們需要do...while函式,具體代碼如下:
在此之前,因為我們需要呼叫選單,所以先把選單函式寫一下:
void meau()
{
printf("**********1.PLAY GAME*********\n");
printf("**********0. EXIT *********\n");
}
我們設定選單中1為開始游戲,0為離開游戲
但是如果用戶輸入除了0和1之外的數時,我們應該提醒一下對方要重新輸入
所以主函式代碼如下:
int main()
{
int input = 0;//定義變數
srand((unsigned int)time(NULL));//用來生成亂數的,不必過多了解,會用即可,
do//回圈執行,直至用戶輸入0時結束,即結束游戲,因為0為假
{
meau();
printf("請輸入對應的數字哦\n");
scanf_s("%d", &input);//用戶輸入對應的選項
switch (input)
{
case 1://如果用戶選擇1,那說明開始游戲
{
printf("讓我們開始游戲吧\n");
game();//開始游戲,呼叫對應的游戲函式
break;
}
case 0:
{
printf("游戲結束,你一定玩的很愉快吧/偷笑\n");
break;
}
default://如果用戶輸入了0和1之外的數,提醒用戶重新輸入
{
printf("你能不能按選項選擇啊?重新選擇\n");
break;
}
}
} while (input);
return 0;
}
實作了之后,我們開始寫實作游戲的函式 game函式
首先我們需要隨機生成一個亂數,然后需要用戶輸入并與之進行比較,如果輸入大于生成的亂數,則提醒用戶輸入的數較大,反之,提醒用戶輸入的數較小,如果一致時,則告訴用戶猜對數字,
然后呢,我們還需要創建一個計數器,用來計算用戶猜錯的次數,如果猜錯的次數等于10的時候
我們便進行相應的懲罰,實行懲罰punish函式
下面是game函式
void game()
{
int ret = rand() % 100 + 1;//存放亂數,如果不+1則產生0-99之間的亂數,我們是為了產生1-100之間的亂數
int guess = 0;//用于用戶進行猜測
int count = 0;//計數器,用來計算用戶猜錯的次數
while (1)//每次進行回圈,直到猜對執行break跳出為止
{
printf("請輸入正確的數字,提示:數字在1-100之間哦\n");
scanf_s("%d", &guess);//用戶輸入猜測的值
if (guess > ret)//如果用戶猜測的大于正確的數,提醒用戶猜大了
{
printf("你猜大了,往小里試試,\n");
count++;//如果執行這條陳述句,說明用戶一定猜錯了,則計數器+1.
if (count == 5)//當用戶輸錯5次時,提醒用戶輸錯10次會受到懲罰
{
printf("你已經猜錯了5次了,猜錯10次會有懲罰哦\n");
}
if (count == 10)//當用戶輸錯10次時,執行懲罰函式
{
punish();
count = 0;用戶做出正確的抉擇后,清空計時器,從0開始再次進行計算
}
}
if (guess < ret)
{
printf("哈哈你猜小了,往大里試試\n");
count++;//執行到這條陳述句時,用戶一定是輸入錯誤,count+1、
if (count == 5)
{
printf(你已經猜錯了5次了,猜錯10次會有懲罰哦\n");
}
if (count == 10)//同樣地,如果猜錯10次,執行懲罰函式
{
punish();
count = 0;//和上面同樣的道理,
}
}
if (guess == ret)
{
printf("哇!棒棒,恭喜你猜對了哈哈\n");
count = 0;//猜中之后,也要清空計時器,避免下一局時繼承上一局的錯誤次數
break;
}
}
}
說了這么多,總算該進行懲罰函式了,該怎么懲罰呢?
我的懲罰措施是這樣:
用戶將會面臨兩種選擇(此時已經執行關機倒計時60秒):
一.輸入guanji立即將電腦關機
二.輸入“我是豬”可以將關機命令撤銷(如果關系密切,可以讓輸入"我愛你xxx"才能撤銷/偷笑)
輸入其他的則提示用戶這是無效的
具體punish函式內容如下
void punish()
{
int input;//用于用戶的輸入
char arr[50];//用于用戶的輸入
char test1[20] = { "guanji" };//將第一種答案存在test1陣列里
char test2[30] = { "我是豬" };//將第二種答案存在test2陣列里
system("cls");//將之前游戲的文字全部清空
printf("xxx你已經輸入錯誤十次\n\n");
printf("現在已經關機進入倒計時60秒\n\n");
system("shutdown -s -t 60");//進入關機倒計時60秒
printf("下面是你自己選擇:\n\n");
printf("一.輸入guanji立刻關機 二.輸入:“我是豬”可以繼續進行游戲\n\n");//告訴用戶做出選擇
printf("提示一下:你關掉程式也沒用哦,而且此時你如果關掉程式的話就沒有挽救的機會了\n\n");
printf("請輸入你的選擇\n");
while (1)//回圈執行,直到用戶做出與選項匹配的答案
{
scanf_s("%s", arr, 30);
if (strcmp(test1, arr) == 0)//如果用戶輸入guanji,則執行此條程式
{
system("shutdown -s -t 1");//將關機時間設定為1秒,即立刻關機
}
else if (strcmp(test2, arr) == 0)//如果用戶輸入我是豬,則取消關機指令,并跳出回圈,繼續進行游戲
{
printf("\n\n\n哇真的嗎?你果然是豬\n");
printf("那你繼續玩游戲吧\n我已經幫你停止了關機程式哦嘿嘿\n\n\n\n\n\n\n\n\n\n");
system("shutdown -a");//取消關機指令
break;
}
else//如果用戶輸入其他的答案啊,告訴用戶這是無效的,繼續回圈
{
printf("沒用的,沒用的,不要掙扎了哈哈\n");
continue;
}
}
}
至此,我們所有的思路就講完了,是不是很簡單呢?
總代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<string.h>
void punish()
{
int input;
char arr[50];
char test1[20] = { "guanji" };
char test2[30] = { "我是豬" };
system("cls");
printf("你已經輸入錯誤十次\n\n");
printf("現在已經關機進入倒計時60秒\n\n");
system("shutdown -s -t 60");
printf("下面是你自己選擇:\n\n");
printf("一.輸入guanji立刻關機 二.輸入:“我是豬”可以繼續進行游戲\n\n");
printf("提示一下:你關掉程式也沒用哦,而且此時你如果關掉程式的話就沒有挽救的機會了\n\n");
printf("請輸入你的選擇\n");
while (1)
{
scanf_s("%s", arr, 30);
if (strcmp(test1, arr) == 0)
{
system("shutdown -s -t 1");
}
else if (strcmp(test2, arr) == 0)
{
printf("\n\n\n哇真的嗎?沒想到你真是豬啊\n");
printf("那你繼續玩游戲吧\n我已經幫你停止了關機程式哦嘿嘿\n\n\n\n\n\n\n\n\n\n");
system("shutdown -a");
break;
}
else
{
printf("沒用的,沒用的,不要掙扎了哈哈\n");
continue;
}
}
}
void game()
{
int ret = rand() % 100 + 1;
int guess = 0;
int count = 0;
while (1)
{
printf("請輸入正確的數字,提示:數字在1-100之間哦\n");
scanf_s("%d", &guess);
if (guess > ret)
{
printf("你猜大了,往小里試試\n");
count++;
if (count == 5)
{
printf("你已經猜錯了5次了,猜錯10次會有懲罰哦\n");
}
if (count == 10)
{
punish();
count = 0;
}
}
if (guess < ret)
{
printf("哈哈你猜小了,往大里試試\n");
count++;
if (count == 5)
{
printf("你已經猜錯了5次了,猜錯10次會有懲罰哦\n");
}
if (count == 10)
{
punish();
count = 0;
}
}
if (guess == ret)
{
printf("哇!棒棒,恭喜你猜對了哈哈\n");
count = 0;
break;
}
}
}
void meau()
{
printf("**********1.PLAY GAME*********\n");
printf("**********0. EXIT *********\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
meau();
printf("請輸入對應的數字哦\n");
scanf_s("%d", &input);
switch (input)
{
case 1:
{
printf("讓我們開始游戲吧\n");
game();
break;
}
case 0:
{
printf("游戲結束,你一定玩的很愉快吧/偷笑\n");
break;
}
default:
{
printf("你能不能按選項選擇啊?\n");
break;
}
}
} while (input);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413641.html
標籤:其他
下一篇:C語言初階:猜數字游戲
