大富翁(简易版)
新手小白,希望各位大佬能多多提出建議,大家一同進(jìn)步
前言
設(shè)計(jì)題目:C語(yǔ)言游戲———大富翁(簡(jiǎn)易版)
一、采用的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)及所代表的含義
Input:判斷是否進(jìn)行游戲
num1,num2,
a1,a2:累計(jì)擲出骰子數(shù)所對(duì)應(yīng)棋盤上的位置
fund=2000,fund2=2000:初始資金
c:判斷游戲是否終止
b1 = b2=:擲出的總數(shù)
i=1:判斷A/B進(jìn)行游戲
二、設(shè)計(jì)思路
第一步:判斷游戲是否進(jìn)行
第二步:判斷A/B玩家進(jìn)行
第三步:值骰子
第四步:判斷擲出的數(shù)所對(duì)應(yīng)效果
第五步:判斷是否獲得成就
第六步:判斷是否有玩家破產(chǎn)
第七步:若有破產(chǎn)則終止程序反之返回第二步
第八步:判斷誰(shuí)獲勝并輸出
第九步:詢問(wèn)是否重新游戲
三:設(shè)計(jì)中的難點(diǎn)及解決方案
難點(diǎn)1:產(chǎn)生隨機(jī)數(shù)
解決:利用rand函數(shù)但其只在一定范圍內(nèi)可以看成隨機(jī)的,所以在引入srand函數(shù)利用time(NULL)變化的種子使其隨機(jī)性增加
難點(diǎn)2:棋盤可變性
解決:利用頭文件宏定義變量可以改變棋盤大小
四:程序代碼
play.c
#include<stdio.h> #include<stdlib.h> #include<time.h> int num1,num2, a1,a2, fund=2000,fund2=2000,c, b1 = 0,b2=0,i=1;int play(int row , int col) {printf("玩家A與B的初始資金均2000元\n");do{printf("****************************\n");printf("********* 1.continue *****\n");printf("********* 0.end **********\n");printf("****************************\n");scanf("%d", &c);//是否繼續(xù)游戲if (c == 0)break;//判斷游戲是否終止if (i % 2 == 1)//判斷玩家A/B進(jìn)行{printf("玩家A的回合\n");srand((int)time(NULL));//用于設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的種子,time(NULL)變化的種子num1 = rand() % 6 + 1;//生成隨機(jī)數(shù)printf("擲出結(jié)果為%d\n", num1);b1 += num1;a1 = b1 % (((row+col))*2+4);//在地圖上所走位置i++;switch (a1)//判斷其走的步數(shù)所對(duì)應(yīng)效果{case 6:printf("倒退三步\n");a1 -= 3;b1 -= 3;break;case 2:printf("銀行利率增長(zhǎng)\n");fund *= 2;printf("剩余資金為%d\n", fund);break;case 5:printf("科創(chuàng)獲獎(jiǎng)得500元\n");fund += 500;printf("剩余資金為%d\n", fund);break;case 7:printf("被電信詐騙700元\n");fund -= 700;printf("剩余資金為%d\n", fund);break;case 9:printf("投資基金增長(zhǎng)\n");fund *= 5;printf("剩余資金為%d\n", fund);break;case 8:printf("前進(jìn)四步\n");a1 += 4;b1 += 4;case 12:printf("獎(jiǎng)學(xué)金得1000元\n");fund += 1000;printf("剩余資金為%d\n", fund);break;case 11:printf("股票暴跌\n");fund /= 4;printf("剩余資金為%d\n", fund);break;case 15:printf("投資被騙\n");fund /= 2;printf("剩余資金為%d\n", fund);break;default:printf("剩余資金為%d\n", fund);break;}if (fund > 20000 &&fund<50000)printf("累計(jì)達(dá)成成就初出茅廬\n");else if (fund > 50000&&fund<70000 )printf("累計(jì)達(dá)成成就初出茅廬 小有成就\n");else if (fund > 70000&&fund<100000 )printf("累計(jì)達(dá)成成就初出茅廬 小有成就 資金充裕\n");else if (fund > 100000 )printf("累計(jì)達(dá)成成就初出茅廬 小有成就 資金充裕 資金高手\n");//判斷獲得的成就}else{printf("玩家B的回合\n");srand((int)time(NULL));num2 = rand() % 6 + 1;printf("擲出結(jié)果為%d\n", num2);b2 += num2;a2 = b2 % (((row + col)) * 2 + 4);i++;switch (a2){case 6:printf("倒退三步\n");a2 -= 3;b2 -= 3;break;case 2:printf("銀行利率增長(zhǎng)\n");fund2 *= 2;printf("剩余資金為%d\n", fund2);break;case 5:printf("科創(chuàng)獲獎(jiǎng)得500元\n");fund2 += 500;printf("剩余資金為%d\n", fund2);break;case 7:printf("被電信詐騙700元\n");fund2 -= 700;printf("剩余資金為%d\n", fund2);break;case 9:printf("投資基金增長(zhǎng)\n");fund2 *= 5;printf("剩余資金為%d\n", fund2);break;case 8:printf("前進(jìn)四步\n");a2 += 4;b2 += 4;case 12:printf("獎(jiǎng)學(xué)金得1000元\n");fund2 += 1000;printf("剩余資金為%d\n", fund2);break;case 11:printf("股票暴跌\n");fund2 /= 4;printf("剩余資金為%d\n", fund2);break;case 15:printf("投資被騙\n");fund2 /= 2;printf("剩余資金為%d\n", fund2);break;default:printf("剩余資金為%d\n", fund2);break;}if (fund2 > 20000 && fund2 < 50000)printf("累計(jì)達(dá)成成就初出茅廬\n");else if (fund2 > 50000 && fund2 < 70000)printf("累計(jì)達(dá)成成就初出茅廬 小有成就\n");else if (fund2 > 70000 && fund2 < 100000)printf("累計(jì)達(dá)成成就初出茅廬 小有成就 資金充裕\n");else if (fund2 > 100000)printf("累計(jì)達(dá)成成就初出茅廬 小有成就 資金充裕 資金高手 資金高手\n");}} while (fund > 0&&fund2 > 0);//判斷是否出現(xiàn)破產(chǎn)if (fund2 > fund){printf("恭喜B勝利");}elseprintf("恭喜A勝利");return 0;//判斷A/B勝利 }main.c
#include<stdio.h> #include"game.h" int main() {int input;do{printf("****************************\n");printf("********* 1.play *********\n");printf("********* 0.exit *********\n");printf("****************************\n");printf("請(qǐng)選擇:>");//請(qǐng)選擇是否開(kāi)始游戲scanf("%d", &input);switch (input)//判斷用戶的選擇{case 1:play( ROW , COL);break;case 0:printf("退出游戲\n");break;default:printf("選擇錯(cuò)誤重新選擇\n");break;}} while (input); }game.h
#pragma once #define ROW 7 #define COL 4//確定棋盤大小 int play(int row, int col);//調(diào)用函數(shù)
總結(jié)
本次實(shí)驗(yàn)設(shè)計(jì)通過(guò)對(duì)循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)的運(yùn)用,使我對(duì)這些結(jié)構(gòu)有了更好的理解;并且通過(guò)不斷學(xué)習(xí),也了解到了隨機(jī)數(shù)生成的方式以及頭文件的利用,讓我對(duì)程序設(shè)計(jì)有了新的理解,利用代碼可以更加方便的進(jìn)行一些工作,還可以獲得樂(lè)趣,同樣與同伴一起討論學(xué)習(xí),使代碼的編寫過(guò)程也不枯燥,一次很好的設(shè)計(jì)體驗(yàn)。新手小白,希望大家對(duì)不對(duì)的地方多多指正,共同進(jìn)步。
總結(jié)
- 上一篇: C++分糖果-真题红太阳幼儿园有n个小朋
- 下一篇: python奇数阶乘求和_Python阶