新手小白,希望各位大佬能多多提出建议,大家一同进步
前言
设计题目:C语言游戏———大富翁(简易版)
一、采用的数据存储结构及所代表的含义
Input:判断是否进行游戏
num1,num2,
a1,a2:累计掷出骰子数所对应棋盘上的位置
fund=2000,fund2=2000:初始资金
c:判断游戏是否终止
b1 = b2=:掷出的总数
i=1:判断A/B进行游戏
二、设计思路
第一步:判断游戏是否进行
第二步:判断A/B玩家进行
第三步:值骰子
第四步:判断掷出的数所对应效果
第五步:判断是否获得成就
第六步:判断是否有玩家破产
第七步:若有破产则终止程序反之返回第二步
第八步:判断谁获胜并输出
第九步:询问是否重新游戏
三:设计中的难点及解决方案
难点1:产生随机数
解决:利用rand函数但其只在一定范围内可以看成随机的,所以在引入srand函数利用time(NULL)变化的种子使其随机性增加
难点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);//是否继续游戏
if (c == 0)
break;//判断游戏是否终止
if (i % 2 == 1)//判断玩家A/B进行
{
printf("玩家A的回合\n");
srand((int)time(NULL));//用于设置rand()产生随机数时的种子,time(NULL)变化的种子
num1 = rand() % 6 + 1;//生成随机数
printf("掷出结果为%d\n", num1);
b1 += num1;
a1 = b1 % (((row+col))*2+4);//在地图上所走位置
i++;
switch (a1)//判断其走的步数所对应效果
{
case 6:
printf("倒退三步\n");
a1 -= 3;
b1 -= 3;
break;
case 2:
printf("银行利率增长\n");
fund *= 2;
printf("剩余资金为%d\n", fund);
break;
case 5:
printf("科创获奖得500元\n");
fund += 500;
printf("剩余资金为%d\n", fund);
break;
case 7:
printf("被电信诈骗700元\n");
fund -= 700;
printf("剩余资金为%d\n", fund);
break;
case 9:
printf("投资基金增长\n");
fund *= 5;
printf("剩余资金为%d\n", fund);
break;
case 8:
printf("前进四步\n");
a1 += 4;
b1 += 4;
case 12:
printf("奖学金得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("累计达成成就初出茅庐\n");
else if (fund > 50000&&fund<70000 )
printf("累计达成成就初出茅庐 小有成就\n");
else if (fund > 70000&&fund<100000 )
printf("累计达成成就初出茅庐 小有成就 资金充裕\n");
else if (fund > 100000 )
printf("累计达成成就初出茅庐 小有成就 资金充裕 资金高手\n");
//判断获得的成就
}
else
{
printf("玩家B的回合\n");
srand((int)time(NULL));
num2 = rand() % 6 + 1;
printf("掷出结果为%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("银行利率增长\n");
fund2 *= 2;
printf("剩余资金为%d\n", fund2);
break;
case 5:
printf("科创获奖得500元\n");
fund2 += 500;
printf("剩余资金为%d\n", fund2);
break;
case 7:
printf("被电信诈骗700元\n");
fund2 -= 700;
printf("剩余资金为%d\n", fund2);
break;
case 9:
printf("投资基金增长\n");
fund2 *= 5;
printf("剩余资金为%d\n", fund2);
break;
case 8:
printf("前进四步\n");
a2 += 4;
b2 += 4;
case 12:
printf("奖学金得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("累计达成成就初出茅庐\n");
else if (fund2 > 50000 && fund2 < 70000)
printf("累计达成成就初出茅庐 小有成就\n");
else if (fund2 > 70000 && fund2 < 100000)
printf("累计达成成就初出茅庐 小有成就 资金充裕\n");
else if (fund2 > 100000)
printf("累计达成成就初出茅庐 小有成就 资金充裕 资金高手 资金高手\n");
}
} while (fund > 0&&fund2 > 0);//判断是否出现破产
if (fund2 > fund)
{
printf("恭喜B胜利");
}
else
printf("恭喜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("请选择:>");//请选择是否开始游戏
scanf("%d", &input);
switch (input)//判断用户的选择
{
case 1:
play( ROW , COL);
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误重新选择\n");
break;
}
} while (input);
}
game.h
#pragma once
#define ROW 7
#define COL 4//确定棋盘大小
int play(int row, int col);//调用函数
总结
本次实验设计通过对循环结构,选择结构的运用,使我对这些结构有了更好的理解;并且通过不断学习,也了解到了随机数生成的方式以及头文件的利用,让我对程序设计有了新的理解,利用代码可以更加方便的进行一些工作,还可以获得乐趣,同样与同伴一起讨论学习,使代码的编写过程也不枯燥,一次很好的设计体验。新手小白,希望大家对不对的地方多多指正,共同进步。