C语言程序设计报告

新手小白,希望各位大佬能多多提出建议,大家一同进步


前言

设计题目: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("掷出结果为%dn", 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("剩余资金为%dn", fund);
				break;
			case 5:
				printf("科创获奖得500元n");
				fund += 500;
				printf("剩余资金为%dn", fund);
				break;
			case 7:
				printf("被电信诈骗700元n");
				fund -= 700;
				printf("剩余资金为%dn", fund);
				break;
			case 9:
				printf("投资基金增长n");
				fund *= 5;
				printf("剩余资金为%dn", fund);
				break;
			case 8:
				printf("前进四步n");
				a1 += 4;
				b1 += 4;
			case 12:
				printf("奖学金得1000元n");
				fund += 1000;
				printf("剩余资金为%dn", fund);
				break;
			case 11:
				printf("股票暴跌n");
				fund /= 4;
				printf("剩余资金为%dn", fund);
				break;
			case 15:
				printf("投资被骗n");
				fund /= 2;
				printf("剩余资金为%dn", fund);
				break;
			default:
				printf("剩余资金为%dn", 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("掷出结果为%dn", 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("剩余资金为%dn", fund2);
				break;
			case 5:
				printf("科创获奖得500元n");
				fund2 += 500;
				printf("剩余资金为%dn", fund2);
				break;
			case 7:
				printf("被电信诈骗700元n");
				fund2 -= 700;
				printf("剩余资金为%dn", fund2);
				break;
			case 9:
				printf("投资基金增长n");
				fund2 *= 5;
				printf("剩余资金为%dn", fund2);
				break;
			case 8:
				printf("前进四步n");
				a2 += 4;
				b2 += 4;
			case 12:
				printf("奖学金得1000元n");
				fund2 += 1000;
				printf("剩余资金为%dn", fund2);
				break;
			case 11:
				printf("股票暴跌n");
				fund2 /= 4;
				printf("剩余资金为%dn", fund2);
				break;
			case 15:
				printf("投资被骗n");
				fund2 /= 2;
				printf("剩余资金为%dn", fund2);
				break;
			default:
				printf("剩余资金为%dn", 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);//调用函数

总结

本次实验设计通过对循环结构,选择结构的运用,使我对这些结构有了更好的理解;并且通过不断学习,也了解到了随机数生成的方式以及头文件的利用,让我对程序设计有了新的理解,利用代码可以更加方便的进行一些工作,还可以获得乐趣,同样与同伴一起讨论学习,使代码的编写过程也不枯燥,一次很好的设计体验。新手小白,希望大家对不对的地方多多指正,共同进步。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>