作為一名C語言的初學者,目前也沒有能力開發出邏輯或功能較為復雜的游戲,在生活中的一次聚會玩到了一個名為“數字炸彈”的游戲,因為其邏輯簡單,沒有比較難以實作的部分,所以就嘗試將其通過C語言實作,
先簡單的介紹一下規則,首先需要一個亂數,假設這個數是69,接著一個玩家在1-100(也可以是其他范圍)中報其中一個數字,假設報的數是50,那么就將1-100分為兩個區間1-50與50-100.
因為69(即亂數)落在50-100這個區間的范圍內,因此此時會有提示——炸彈落在50-100的范圍內,接著繼續報數,假設報的數是75,那么繼續分為50-75,75-100兩個區間,容易知道此時會提示炸彈落在50-75區間內,如此反復進行,直到在游戲程序中有人報數時報到了那個炸彈數(在此例子中即69),那么游戲就結束,
那么倘若需要將此游戲通過C語言的方式實作,那么需要處理以下幾個關鍵點
1.生成亂數,僅需通過rand函式即可(呼叫rand函式前需要先呼叫srand函式)生成,通過在srand函式內呼叫time函式去不斷變換srand函式內引數的值,使得rand不斷生成亂數,
2.處理好區間變換的程序,我在這利用了陣列,通過不斷的移動下標的方式,來模擬區間的不斷變換,
3.處理好不正確輸入的解決方式,不正確輸入的情況有輸入數超出一開始所定義的區間范圍(即若區間初始時定義在1-100,輸入為101,即視為錯誤輸入)、輸入不在系統所提示的炸彈所在范圍(即若游戲程序中系統提示炸彈在50-70中,玩家輸入為49或71時,視為錯誤輸入),其實第一種情況是被第二種情況所包含的,因此我們只需處理第二種情況就好了,解決這個問題并不難,只需要通過判斷陳述句,若為錯誤輸入,則提示玩家錯誤輸入,然后再次指令跳到輸入陳述句即可,
以下為源代碼
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game(int arr[])
{
int ret = rand()%100+1;//用來生成1-100的亂數,當然也可以生成任意一個區間的亂數
int x;//儲存報數
int left = 0;//陣列左下標,即為區間左邊的數
int right = 99;//陣列右下標,即為區間右邊的數
while (1)
{
printf("請輸入你猜的數字:");
scanf("%d", &x);
if (x > arr[right] || x < arr[left])
{
printf("輸入數不在炸彈所在區間內,請重新輸入\n");
continue;
} // 處理錯誤輸入的情況
if (x < ret)
{
left = x - 1;//移動下標達到區間變動的效果
printf("炸彈在%d到%d之間\n", arr[left], arr[right]);
}
if (x > ret)
{
right = x - 1;//同上
printf("炸彈在%d到%d之間\n", arr[left], arr[right]);
}
if (x == ret)
{
printf("觸發炸彈!!!");
break;
}
}
}
void menu()
{
printf(" 歡迎來到數字炸彈游戲\n");
printf("開始游戲請選擇1,退出游戲請選擇0\n");
}
int main()
{
srand((unsigned int)time(NULL));
int arr[100];
int i;
int n = 0;
menu();
while (1)
{
scanf("%d", &n);
if (n == 1)
{
for (i = 0; i < 100; i++)
{
arr[i] = i + 1;
}
game(arr);
break;
}
else if (n == 0)
{
break;
}
else
{
printf("選擇錯誤,請重新選擇\n");
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413998.html
標籤:其他
上一篇:時鐘IC,INS5101A,I2C低功耗 RTC 實時時鐘芯片,替換HYM8563,替換(NXP)PCF8563,TCS8563,I2C低功耗 RTC 實時時鐘芯片
