内部基本逻辑实现(2021022100010002)

内部基本逻辑实现(2021022100010002)

本文基于2020年全国大学生数学建模大赛B题题目软件编写(总)(2021022100010001)实现其内部基本逻辑。

一、程序框架

程序文件框架
“Data” —— 存储地图信息变量
“Init_function” —— 游戏初始化
“Player_function”——玩家动作
“System_function”——系统操作(地图打印、修改、保存、读取)
“Game_base_data”——存储系统地图

1.1 根据需求初步设计程序框架

int main()
{
   
	// 游戏初始化——初始化各个关键参数
	Init_function(/*参数*/);
	
	// 游戏进行
	while(/*游戏天数未超过最大允许*/)
	{
   
		// 场景动作
		if(/*起点*/)
		else if(/*村庄*/)
		else if(/*矿山*/)

		// 移动(沙暴挖矿不能移动)
		if(/*非沙暴且未挖矿*/)

		// 以上操作完毕后 对关键参数进行结算

		// 判断结算后关键参数是否满足游戏条件(死亡|到达终点)——满足继续游戏、不满足退出
		
		// 对当天信息进行输出
	}
	
	// 游戏结束——结算
	Game_over(/*参数*/);

	printf("\n");
	system("pause");
	return 0;
}

1.2 创建局部变量存储关键信息

int main()
{
   
    /* ------游戏基本信息------ */
	int lode;				// 记录玩家负重上限
	int moneyInit;			// 记录玩家的初始资金
	int deadline;			// 记录游戏截止日期
	int earning;			// 记录一天挖矿获得的基础收益
	int waterweight;		// 记录每箱水的质量
	int waterprice;			// 记录每箱水的基准价格
	int waterconsume[3];	// 记录水在各天气的基础消耗量
	int foodweight; 		// 记录每箱食物的质量
	int foodprice;			// 记录每箱食物的基准价格
	int foodconsume[3];		//记录食物在各天气的基础消耗量
	int block_number;		// 记录地图块数

	/* ------每天操作信息------ */
	int day = 0;			// 记录游戏天数,起始为第0天
	int sign_buy = 0;		// 记录当天是否购买
	int sign_mining = 0;	// 记录当天是否挖矿
	int sign_move = 0;		// 记录当天是否移动
	int base_water = 0;		// 记录当前天气水的基础消耗量
	int base_food = 0;		// 记录当前天气食物的基础消耗量
	int day_water = 0;		// 记录当天购买水的数量(箱)
	int day_food = 0;		// 记录当天购买食物的数量(箱)
	int consume_water = 0;	// 记录当天消耗的水(不移动/移动/挖矿)
	int consume_food = 0;	// 记录当天消耗的食物(不移动/移动/挖矿)
	int End_money;			// 游戏结束后剩余资金
	
	// 玩家信息
	int position = 1;		// 记录当前所出地图块代码(位置)
	int before_position = 0;// 记录要移动的地图块代码(位置)
	int food = 0;			// 当前食物量(箱)
	int water = 0;			// 当前水量(箱)
	int player_lode = 0;	// 玩家当前负重(千克)
	int money;				// 当前资金(元)

	// 标志位
	int buy = 1;	// 1代表还未在出发点购买,0代表已经购买完毕
	int play_code;	// 记录玩家输入的操作码
}

1.3 创建地图信息变量

创建Data.h 存放地图信息变量

#ifndef _DATA_H
#define _DATA_H

typedef struct Map
{
   
	int Num;			// 对应标号
	char *area;			// 对应地点名称
	int rode[10];		// 对应可走地点(预留10个空间)
	int rode_pass_num;	// 可走地点的数量
}Map;
extern char *weather[3];		// 存放天气信息
extern char *areas[5];			// 存放地点信息
extern char *weather_daily[30];	// 存放每天的天气信息
extern Map map[100];			// 存放地图信息

extern char *path[2];			// 存放路径

#endif // !_DATA_H

在main.c文件中对地图信息变量初始化并建立全局变量map[100] 用以存储地图信息

char *weather[3] = {
    "晴朗", "高温", "沙暴" };
char *areas[5] = {
    "起点", "终点", "村庄", "矿山", "普通" };
char *weather_daily[30] = {
    "高温", "高温", "晴朗", "沙暴", "晴朗", "高温", "沙暴", "晴朗", "高温", "高温",
						"沙暴", "高温", "晴朗", "高温", "高温", "高温", "沙暴", "沙暴", "高温", "高温",
						"晴朗", "晴朗", "高温", "晴朗", "沙暴", "高温", "晴朗", "晴朗", "高温", "高温" };
Map map[100];	// 存放地图信息

二、“Init_function”文件

GameData_Init()函数: 游戏初始化函数。调用Init()函数及Get_data1()函数。
Init()函数: 用户自定义游戏参数。调用Get_road()函数。
Get_data1()函数: 读取已有游戏参数。
Get_road()函数: 由用户输入地图信息。

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Data.h>
#include <System_function.h>

// 游戏初始化函数
void GameData_Init(int* lode, int* moneyInit, int* money, int* deadline, int* earning, int* waterweight, int* waterprice, int* waterconsume, int* foodweight, int* foodprice, int* foodconsume, int* block_number);
// 初始化
void Init(int* lode, int* moneyInit, int* money, int* deadline, int* earning, int* waterweight, int* waterprice, int* waterconsume, int* foodweight, int* foodprice, int* foodconsume, int* block_number);
// 游戏初始化,用户输入地图块可走路径
void Get_road(int i, int block_number);

2.1 GameData_Init()函数——主调函数(自定义或加载游戏数据)

// 游戏初始化函数。调用Init()函数及Get_data1()函数。
void GameData_Init(int *lode, int *moneyInit, int *money, int *deadline, int *earning, int *waterweight, int *waterprice, int *waterconsume, int *foodweight, int *foodprice, int *foodconsume, int *block_number)
{
   
	int tmp;
	printf("在游戏开始前请完善本次游戏的各项属性:\n");
	printf("(读取游戏参数:1, 新建游戏参数:2):");
	scanf("%d", &tmp);

	if (tmp == 1)
		Get_data1(lode, moneyInit, money, deadline, earning, waterweight, waterprice, waterconsume, foodweight, foodprice, foodconsume, block_number);
	else
		Init(lode, moneyInit, money, deadline, earning, waterweight, waterprice, waterconsume, foodweight, foodprice, foodconsume, block_number);
}

2.2 Init()函数——实现用户自定义游戏参数

// 游戏初始化,设置各个参数
void Init(int *lode, int *moneyInit, int *money, int *deadline, int *earning, int *waterweight, int *waterprice, int *waterconsume, int *foodweight, int *foodprice, int *foodconsume, int *block_number)
{
   
	int complete = 0;
	while (!complete)
	{
   
		printf("请输入玩家的负重上限(千克):");
		scanf("%d", lode);
		printf("请输入玩家的初始资金(元):");
		scanf("%d", moneyInit);
		*money = *moneyInit;
		printf("请输入游戏的截止日期(天):");
		scanf("%d", deadline);
		printf("请输入挖矿的基础收益(元):");
		scanf("%d", earning);
		printf("请输入每箱水的质量(千克):");
		scanf("%d", waterweight);
		printf("请输入每箱水的基准价格(元/箱):");
		scanf("%d", waterprice);
		printf("请输入晴朗天气水基础消耗量(箱):");
		scanf("%d", waterconsume);
		printf("请输入高温天气水基础消耗量(箱):");
		scanf("%d", waterconsume + 1);
		printf("请输入沙暴天气水基础消耗量(箱):");
		scanf("%d", waterconsume + 2);
		printf("请输入每箱食物的质量(千克):");
		scanf("%d", foodweight);
		printf("请输入每箱食物的基准价格(元/箱):");
		scanf("%d", foodprice);
		printf("请输入晴朗天气食物基础消耗量(箱):");
		scanf("%d", foodconsume);
		printf("请输入高温天气食物基础消耗量(箱):"
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值