内部基本逻辑实现(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("请输入高温天气食物基础消耗量(箱):"