问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言编写一个猜价格游戏,答案满意再加50分!!!!24

发布网友 发布时间:2023-10-14 03:08

我来回答

5个回答

热心网友 时间:2024-12-02 20:08

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

/*不做错误处理,
不做程序结构考虑
只是一个破烂儿程序而已
VC2008和Dev C++应该能通过
VC6估计需要改改*/

int main()
{
typedef struct {char name[100]; int score;}Node, *PNode;

Node List[5] = {0};

Node node = {0};

while(1)
{
printf("输入名字:");
scanf("%s", node.name);

srand((unsigned int)time(NULL));
int num= rand()%8999 + 1000;
int guess = 0, guessed = 0;

while (guess<10)
{
guess++;
printf("你猜是:");
scanf("%d", &guessed);
if (guessed==num)
{
printf("中了\n");
node.score = guess;
for (int i=0; i<5; i++)
{
if (!List[i].score)
{
memcpy(&List[i], &node, sizeof(node));
break;
}

if (List[i].score>guess)
{
for (int j=4; j>i; j--)
{
memcpy(&List[j], &List[j-1], sizeof(node));
}

memcpy(&List[i], &node, sizeof(node));
break;
}
}
break;
}
if (guessed>num)
{
printf("大了\n");
}
else
{
printf("小了\n");
}
}

for (int i=0; i<5; i++)
{
printf("%s->得分<-%d\n", List[i].name, List[i].score);
}

printf("清空排行榜?(输入0清空):");
int clearit = 1;
scanf("%d", &clearit);
if (!clearit)
{
memset(&List[0], 0, sizeof(node)*5);
}
}
return 0;
}追问这个我去试试,有用就给分

追答晕...楼下的真有时间
就是实现复杂了点儿
再说了 都构造函数了
既然 C++
还那么麻烦自己构造什么数据结构
直接 vector sort find 不就解决了么....晕...

热心网友 时间:2024-12-02 20:08

你好
我觉得这个游戏本身不是什么难题,但是我现在不会有那么多时间耗在这上面来帮你写游戏,那样我的一小半天又没有了。百度的知道平台是用来大家相互交流问题的,你有难题如果我能解决我会很乐意帮你解决的,但不是像你这样自己什么都不管,直接把你的要求发上来,然后等别人帮你解答,这不就完全的伸手党一个吗?要是你在解决这个游戏的过程中有什么问题我会很乐意帮你的,但是对于完全的伸手党,还是自己劝你自己多动脑吧!追问这个游戏的前半部分不难,我关键是不知道关于排行榜的保存,更新,清除以及查看和两部分之间怎么连接

追答c语言中的fopen()和fwrite()函数 你可以用来存储数据 之后还可以用来读出存储的数据,既然能写出程序的前半部分那么看下这两个文件操作的函数应该是能很快应用出来的,你可以试试!

热心网友 时间:2024-12-02 20:09

/*
实现了题目的所有功能。
将猜价格游戏中的【玩家信息】保存在文件:player.txt 中(开始这个文件可以不存在)
内存中用【链表】的形式保存【玩家信息】
将猜价格游戏中的【游戏信息】保存在文件:game.txt 中(开始这个文件可以不存在)
内存中用【链表】的形式保存【游戏信息】
有简单的【菜单界面】。
有基本的【错误处理】。
有友好的【错误提示】。
完善了【排名法则】(见 sortGame 函数)

所有猜价格游戏【相关的参数】(比如价格范围,显示前多少名等)都被定义成全局的常量,便于修改

开始玩猜价格游戏需要【注册一个账号】,见主菜单的[3]。
账号是唯一的,不能被多次注册。
注册以后,【每次程序关闭后重新打开程序,账号依然有效】(player.txt 文件不能被破坏)。

所有玩家【玩猜价格游戏的全过程】都会被记录,
包括
1)开始时间,
2)结束时间,
3)要猜中的价格,
4)玩家猜的次数,
5)每次猜的价格,
6)最终猜的结果(猜出或未猜出)。

以后,【每次程序关闭后重新打开程序,猜价格记录依然有效】(game.txt 文件不能被破坏)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

// 格式化时间函数
char __format_time__[40];
char* getFormatTime(long t)
{
strftime(__format_time__,sizeof(__format_time__)/sizeof(char),"%Y.%m.%d %H:%M:%S",gmtime(&t));
return __format_time__;
}

// 保存玩家信息的文件
char PLAYER_DATA_FILE_NAME[] = "player.txt";
// 系统默认的用户名
const char PALYER_DEFAULT_SYSTEM_NAME[] = "player";
// 用户名最大长度
const int PLAYER_MAX_NAME_LENGTH = 20;
// 密码最大长度
const int PLAYER_MAX_PASS_LENGTH = 20;
// 玩家信息
struct Player
{
// 唯一的账号名称
char name[PLAYER_MAX_NAME_LENGTH+1];
// 登陆密码
char pass[PLAYER_MAX_PASS_LENGTH+1];
struct Player *next;

Player()
{
strcpy(name,"");
strcpy(pass,"");
next = NULL;
}
};
// 全局变量:游戏玩家链表
struct Player* _players = NULL;

// 全局变量:当前登陆的游戏玩家
struct Player _loginPlayer;

// 保存游戏信息的文件
char GAME_DATA_FILE_NAME[] = "game.txt";
// 排行榜上记录保存个数
const int GAME_MAX_TOP_PLAYERS = 5;
// 猜价格最多尝试次数
const int GAME_MAX_TRY_TIME = 3;
// 猜价格的最小值
const int GAME_MIN_PRICE = 1000;
// 猜价格的最大值
const int GAME_MAX_PRICE = 9999;
// 一局游戏的信息
struct Game
{
// 游戏开始时间
long startTime;
// 游戏结束时间
long endTime;
// 玩家账号
char playerName[PLAYER_MAX_NAME_LENGTH+1];
// 真实价格
int realPrice;
// 是否成功猜出
int isSuccess;
// 玩家一共猜的次数
int guessTime;
// 玩家猜了 guessTime 次,每次才的价格
int guessPrice[GAME_MAX_TRY_TIME];
struct Game *next;

Game()
{
startTime = time(NULL);
strcpy(playerName,"");
srand(time(NULL));
isSuccess = 0;
realPrice = rand()%(GAME_MAX_PRICE-GAME_MIN_PRICE)+GAME_MIN_PRICE;
guessTime = 0;
next = NULL;
}
};
// 全局变量:猜价格游戏链表
struct Game* _games = NULL;

// 初始化 游戏玩家链表
void initPlayer()
{
FILE * playerFile = fopen(PLAYER_DATA_FILE_NAME,"r");
struct Player *p,tempPlayer;
if(playerFile)
{
while(fscanf(playerFile,"%s%s",tempPlayer.name,tempPlayer.pass)!=EOF)
{
if(_players == NULL)
{
_players = (struct Player*)malloc(sizeof(struct Player));
*_players = tempPlayer;
p = _players;
}
else
{
p->next = (struct Player*)malloc(sizeof(struct Player));
*p->next = tempPlayer;
p = p->next;
}
}
fclose(playerFile);
}
}

// 保存 游戏玩家链表
void savePlayer()
{
FILE * playerFile = fopen(PLAYER_DATA_FILE_NAME,"w");
struct Player *p;
if(playerFile)
{
p = _players;
while(p)
{
fprintf(playerFile,"%s %s\n",p->name,p->pass);
p = p->next;
}

fclose(playerFile);
}

}

// 初始化 猜价格游戏链表
void initGame()
{
FILE * gameFile = fopen(GAME_DATA_FILE_NAME,"r");
struct Game *p,tempGame;
int i;
if(gameFile)
{
while(
fscanf(gameFile,"%ld%ld%s%d%d%d",
&tempGame.startTime,
&tempGame.endTime,
&tempGame.playerName,
&tempGame.realPrice,
&tempGame.isSuccess,
&tempGame.guessTime
)!=EOF)
{
for(i=0;i<tempGame.guessTime;i++)
{
fscanf(gameFile,"%d",&tempGame.guessPrice[i]);
}
if(_games == NULL)
{
_games = (struct Game*)malloc(sizeof(struct Game));
*_games = tempGame;
p = _games;
}
else
{
p->next = (struct Game*)malloc(sizeof(struct Game));
*p->next = tempGame;
p = p->next;
}
}
fclose(gameFile);
}

}
// 保存 猜价格游戏链表
void saveGame()
{
FILE * gameFile = fopen(GAME_DATA_FILE_NAME,"w");
struct Game *p;
int i;
if(gameFile)
{
p = _games;
while(p)
{
fprintf(gameFile,"%ld %ld %s %d %d %d",
p->startTime,
p->endTime,
p->playerName,
p->realPrice,
p->isSuccess,
p->guessTime
);

for(i=0;i<p->guessTime;i++)
{
fprintf(gameFile," %d",p->guessPrice[i]);
}
fprintf(gameFile,"\n");
p = p->next;
}
fclose(gameFile);
}

}
// 猜价格游戏主菜单
int printMainMenu()
{
char strChoice[100];
int intChoice;
do
{
printf("\n*******************************************\n");
printf("****主菜单\n");
printf("*******************************************\n");
printf("****1)查看排行榜\n");
printf("****2)清除排行榜\n");
printf("****3)登录账号开始游戏\n");
printf("****4)申请账号开始游戏\n");
printf("****5)退出游戏\n");
printf("*******************************************\n");
scanf("%s",strChoice);
intChoice = atoi(strChoice);
if(intChoice<1 || intChoice >5)
{
printf("****命令错误!请重新输入命令!");
}
}
while(intChoice<1 || intChoice >5);

return intChoice;
}

/*
对已有的游戏记录根据【猜价格的次数】递增排序
如果【猜价格的次数】相等,
根据【使用的时间】递增排序,
如果【使用的时间】相等,
根据【开始的时间】递增排序,

*/
void sortGames()
{
struct Game *p , *q , tempGame1,tempGame2;
p = _games;

while(p)
{
q = p->next;
while(q)
{
if
(
p->guessTime > q->guessTime ||
(p->guessTime == q->guessTime && (p->endTime - p->startTime) > (q->endTime - q->startTime)) ||
(p->guessTime == q->guessTime && (p->endTime - p->startTime) == (q->endTime - q->startTime) && p->startTime > q->startTime)
)
{
tempGame1 = *p;
tempGame2 = *q;
// 注意交换的时候,next 指针不能交换
*p = tempGame2;
p->next = tempGame1.next;
// 注意交换的时候,next 指针不能交换
*q = tempGame1;
q->next = tempGame2.next;
}

q = q->next;
}
p = p->next;
}
}
// 查看排行榜
void printRankList()
{
int counter = 0;
struct Game *p;
printf("\n*******************************************\n");
printf("****玩家排名\n");
printf("*******************************************\n");
// 没有记录
if(!_games)
{
printf("****排名:%4d用户:%10s(default)用了%4d次\n",1,PALYER_DEFAULT_SYSTEM_NAME,GAME_MAX_TRY_TIME);
}
else
{
// 排序
sortGames();
p = _games;
counter = 0;
// 查看前 GAME_MAX_TOP_PLAYERS 名(如果有那么多),并且成功猜出价格的
while(p && counter < GAME_MAX_TOP_PLAYERS && p->isSuccess)
{
counter ++;
printf("****排名:%4d用户:%10s用了%4d次\n",counter,p->playerName,p->guessTime);
printf(" 开始时间:%s\n",getFormatTime(p->startTime));
printf(" 结束时间:%s\n\n",getFormatTime(p->endTime));
p = p->next;
}
}
printf("*******************************************\n");
}

// 清除排行榜
void clearRankList()
{
struct Game *p = _games , *q;
while(p)
{
q = p->next;
free(p);
p=q;
}
_games = NULL;
printf("\n*******************************************\n");
printf("****清空排名榜\n");
printf("*******************************************\n");
printf("****排名榜已经清空!\n");
printf("*******************************************\n");
}

// 猜价格游戏用户登陆菜单
int printLoginMenu()
{
struct Player *p;
char name[PLAYER_MAX_NAME_LENGTH+1];
char pass[PLAYER_MAX_PASS_LENGTH+1];
int i;
char ch;

printf("\n*******************************************\n");
printf("****登录菜单\n");
printf("*******************************************\n");
printf("****输入用户名称:");
scanf("%s",name);
printf("****输入用户密码:");
scanf("%s",pass);
/*
i=0;
while((ch=getch())!='\n')
{
pass[i++]=ch;
}
pass[i]='\n';
*/
p=_players;
while(p)
{
if(strcmp(p->name,name) == 0 && strcmp(p->pass,pass) == 0)
{
break;
}
else
{
p = p->next;
}
}
if(p)
{
printf("****登陆成功!\n");
printf("*******************************************\n");
strcpy(_loginPlayer.name,name);
strcpy(_loginPlayer.pass,pass);
return 1;
}
else
{
printf("****登陆失败!用户名不存在或者密码错误!\n");
printf("*******************************************\n");
return 0;
}
}

// 猜价格游戏用户注册菜单
int printRegisterMenu()
{
struct Player *p;
char name[PLAYER_MAX_NAME_LENGTH+1];
char pass[PLAYER_MAX_PASS_LENGTH+1];
int i;
char ch;

printf("\n*******************************************\n");
printf("****注册菜单\n");
printf("*******************************************\n");
do
{
printf("****输入要注册的用户名称:");
scanf("%s",name);
if(strcmp(PALYER_DEFAULT_SYSTEM_NAME,name) == 0)
{
printf("****%s 是系统默认的用户名,不能被注册!\n",PALYER_DEFAULT_SYSTEM_NAME);
}
else if(strlen(name)==0)
{
printf("****用户名不能为空!\n");
}
}
while(strlen(name)==0 || strcmp(PALYER_DEFAULT_SYSTEM_NAME,name)== 0 );

printf("****输入要注册的用户密码:");
scanf("%s",pass);
/*
i=0;
while((ch=getch())!='\n')
{
pass[i++]=ch;
}
pass[i]='\n';
*/

p=_players;
while(p)
{
if(strcmp(p->name,name) == 0 && strcmp(p->pass,pass) == 0)
{
break;
}
else
{
p = p->next;
}
}
if(!p)
{
printf("****注册成功!\n");
printf("*******************************************\n");
// 更新当前登陆的用户
strcpy(_loginPlayer.name,name);
strcpy(_loginPlayer.pass,pass);
// 添加一个新的玩家到玩家列表
p = (struct Player*)malloc(sizeof(struct Player));
*p = _loginPlayer;
p->next = _players;
_players = p;

return 1;
}
else
{
printf("****注册失败!该用户名已经被注册!\n");
printf("*******************************************\n");
return 0;
}
}

void play()
{
struct Game newGame, *p;
char strChoice[100];
int intChoice;
int guessPrice;
// 当前游戏的玩家为当前登陆的玩家
strcpy(newGame.playerName,_loginPlayer.name);

printf("\n*******************************************\n");
printf("****猜价格菜单\n");
printf("*******************************************\n");
printf("****您好:%s\n",_loginPlayer.name);
// 下面这句 printf 可以根据需要注释掉
printf("****真实价格为:%d\n",newGame.realPrice);
printf("*******************************************\n");
while(newGame.guessTime < GAME_MAX_TRY_TIME)
{
printf("[第%2d次]输入您猜的价格:",newGame.guessTime+1);
scanf("%d",&guessPrice);
newGame.guessPrice[newGame.guessTime++] = guessPrice;
if(guessPrice == newGame.realPrice)
{
newGame.isSuccess = 1;
break;
}
else if(guessPrice < newGame.realPrice)
{
printf("****低了!\n");
}
else
{
printf("****高了!\n");
}
}
// 记录猜价格游戏结束时间
newGame.endTime = time(NULL);
// 判断猜价格结果
if(newGame.isSuccess == 1)
{
printf("****恭喜你猜出了真实价格!\n");
}
else
{
printf("****很遗憾,您没有猜出真实价格!真实价格为:%6d!\n",newGame.realPrice);
}

// 记录将本轮猜价格游戏
p = (struct Game*)malloc(sizeof(struct Game));
*p = newGame;
p->next = _games;
_games = p;
printf("*******************************************\n");

do
{
printf("****1)继续\n");
printf("****2)返回\n");
printf("*******************************************\n");
scanf("%s",&strChoice);
intChoice = atoi(strChoice);
if(intChoice<1 || intChoice>2)
{
printf("****命令错误!请重新输入命令!\n");
}
}
while(intChoice<1 || intChoice>2);

// 继续下一轮
if(intChoice==1)
{
play();
}
// 返回之前注销登录的账号
else if(intChoice==2)
{
strcpy(_loginPlayer.name,"");
strcpy(_loginPlayer.pass,"");
}
}
void startGame()
{
int choice ;
initPlayer();
initGame();

while(1)
{
choice = printMainMenu();
switch(choice)
{
// 打印排行榜
case 1:
{
printRankList();
break;
}
// 清空排行榜
case 2:
{
clearRankList();
break;
}
// 用户登陆并开始游戏
case 3:
{
if(printLoginMenu())
{
play();
}
break;
}
// 用户注册并开始游戏
case 4:
{
if(printRegisterMenu())
{
play();
}
break;
}
// 用户退出游戏
case 5:
{
savePlayer();
saveGame();
exit(0);
break;
}
default:
{
printf("****命令错误!请重新输入命令!\n");
break;
}
}
}
}

int main(int argc, char *argv[])
{
startGame();
return 0;
}

热心网友 时间:2024-12-02 20:09

排行榜的保存可以用文件实现,需要比较排名的时候将其读入特定的数据结构中再比较。。。

热心网友 时间:2024-12-02 20:10

我知道你是江师傅,对不。追问是的。。。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
吃干燥剂会有什么反应 干燥剂不慎食用怎么办 于冕被流放多少时间才回来 石羊场客运站坐几路公汽到成都市龙潭社区保平村九组? 从成都石羊场到龙潭寺北湖客运站做地铁公交咋个赶车呀?老师们_百度知 ... 成都理工大学坐车到石羊场客运站怎么走?大概要多久啊?谢谢!! 请问一下成都理工大学到石羊车站怎么做车啊? 还在盲目护理毛孔吗?如何正确护理毛孔? 毛孔粗大该如何处理? 脸t区毛孔粗大怎么办 毛孔粗大的原因是什么 我的农历是1991年1120日是什么星座4 我用同一个手机号申请了两个后,原来那个不能登了该... 1990年阴历1120是什么星座1 1997农历1120什么星座2 我用同一个手机号申请了两个后,原来那个不能登了该... 老公坚持要跟我离婚,我怎样才能挽回呢? 老公非要离婚怎样挽留 建筑面积有计算规则吗? 阳台建筑面积计算规则最新标准9 都说懂车的人会买名图,那名图比朗逸更优秀吗? 孩子现在上幼儿园,他班里别的小朋友有报班学英语的,请问家长们,有这个... 如何做好军事运输安全防范工作1 2009娄底初一下册期末英语试题答案1293 头上有XC的那个表情包是什么 全景栾川你我共建倡议书?30 总结栾川环境发生了怎样的变化?39 research 和study的区别250 打造全景栾川的意义68 梦幻西游手游2016春节新春贺礼袋怎么领取 新春贺礼袋怎么解... 肖茵多少岁?结婚了嘛? 求一个C语言写的倒计时程序,要求显示从30秒到0秒1 C语言编小游戏如何实现倒计时和游戏同时进行3 用C语言写游戏如何设置一个时钟1 花生酱制作方法????可以用花生油吗??2 谁有普通机床C620的具体尺寸,如转轮的尺寸,法兰的尺寸。。...1 7-8月广州天气怎么样?是不是很热,容易下雨么?去旅游要注意...5 广州8月份的天气会不会很热?1 每年7、8月份去杭州西湖旅游的人多吗?杭州7、8月份的天气怎...78 去广州旅游需要准备什么55 保养皮肤的顺序...是什么..?..?5 批处理bat文件怎么能每次运行都能自己输入一个字符串,然后存入一个变量... 在成都站订广元到乌鲁木齐的火车票,最新一天的火车票是下午3点以后才出... 东莞如何去找汽车维修工作 13款陆风x5外置皮带怎么装 手机和电脑使用同一个,聊天记录能够同步吗?10 我要叫男朋友老公他不同意说明什么?22 我叫男友老公,他却从来都不叫我老婆,而且我叫他叫,他居然说我...8 关联qq任何一方修改了密码都不能能收到对方的消息吗?75 为什么qq关联的人对方消息看不到1389 油用牡丹几月下种子4