题目要求c语言课程设计题目编一个连连看,有成绩排行

用C语言编写算法与分析的题目 各位大神求求你们救救小女子吧~这个1月10号就要上交了!!这个关乎到我的期末成绩啊~~~(&_&)~~~~下血本了……
[问题点数:100分,无满意结帖,结帖人jensuo]
用C语言编写算法与分析的题目 各位大神求求你们救救小女子吧~这个1月10号就要上交了!!这个关乎到我的期末成绩啊~~~(&_&)~~~~下血本了……
[问题点数:100分,无满意结帖,结帖人jensuo]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2013年3月 C/C++大版内专家分月排行榜第三
2013年7月 VC/MFC大版内专家分月排行榜第三2011年12月 VC/MFC大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。c语言编写一个猜价格游戏,答案满意再加50分!!!!_百度知道
c语言编写一个猜价格游戏,答案满意再加50分!!!!
/* 实现了题目的所有功能。 将猜价格游戏中的【玩家信息】保存在文件: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 *
Player() {
strcpy(name,&&);
strcpy(pass,&&);
next = NULL; } };// 全局变量:游戏玩家链表 struct Player* _players = NULL;// 全局变量:当前登陆的游戏玩家 struct Player _loginP// 保存游戏信息的文件 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 startT // 游戏结束时间
// 玩家账号
char playerName[PLAYER_MAX_NAME_LENGTH+1]; // 真实价格
realP // 是否成功猜出
isS // 玩家一共猜的次数
// 玩家猜了 guessTime 次,每次才的价格
guessPrice[GAME_MAX_TRY_TIME]; struct 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,tempP if(playerFile) {
while(fscanf(playerFile,&%s%s&,tempPlayer.name,tempPlayer.pass)!=EOF)
if(_players == NULL)
_players = (struct Player*)malloc(sizeof(struct Player));
*_players = tempP
p-&next = (struct Player*)malloc(sizeof(struct Player));
*p-&next =
fclose(playerFile);
}}// 保存 游戏玩家链表 void savePlayer(){ FILE * playerFile = fopen(PLAYER_DATA_FILE_NAME,&w&); struct Player *p; if(playerFile) {
fprintf(playerFile,&%s %s\n&,p-&name,p-&pass);
fclose(playerFile); }
}// 初始化 猜价格游戏链表
void initGame(){ FILE * gameFile = fopen(GAME_DATA_FILE_NAME,&r&); struct Game *p,tempG
if(gameFile) {
fscanf(gameFile,&%ld%ld%s%d%d%d&,
&tempGame.startTime,
&tempGame.endTime,
&tempGame.playerName,
&tempGame.realPrice,
&tempGame.isSuccess,
&tempGame.guessTime
for(i=0;i&tempGame.guessTi++)
fscanf(gameFile,&%d&,&tempGame.guessPrice[i]);
if(_games == NULL)
_games = (struct Game*)malloc(sizeof(struct Game));
*_games = tempG
p-&next = (struct Game*)malloc(sizeof(struct Game));
*p-&next =
fclose(gameFile); } }// 保存 猜价格游戏链表 void saveGame(){ FILE * gameFile = fopen(GAME_DATA_FILE_NAME,&w&); struct Game *p;
if(gameFile) {
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-&guessTi++)
fprintf(gameFile,& %d&,p-&guessPrice[i]);
fprintf(gameFile,&\n&);
fclose(gameFile); }
}// 猜价格游戏主菜单 int printMainMenu(){ char strChoice[100]; int
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 intC}/*
对已有的游戏记录根据【猜价格的次数】递增排序
如果【猜价格的次数】相等,
根据【使用的时间】递增排序,
如果【使用的时间】相等,
根据【开始的时间】递增排序, */void sortGames(){ struct Game *p , *q , tempGame1,tempGame2; p = _
while(p) {
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 指针不能交换
*q = tempGame1;
q-&next = tempGame2.
p = p-& }}//
查看排行榜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);
// 排序
sortGames();
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);
开始时间:%s\n&,getFormatTime(p-&startTime));
结束时间:%s\n\n&,getFormatTime(p-&endTime));
} printf(&*******************************************\n&);
} // 清除排行榜void clearRankList() { struct Game *p = _games , *q;
while(p) {
} _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];
printf(&\n*******************************************\n&); printf(&****登录菜单\n&); printf(&*******************************************\n&);
printf(&****输入用户名称:&); scanf(&%s&,name); printf(&****输入用户密码:&); scanf(&%s&,pass); /* i=0; while((ch=getch())!='\n') {
pass[i++]=
} pass[i]='\n'; */ p=_ while(p) {
if(strcmp(p-&name,name) == 0 && strcmp(p-&pass,pass) == 0)
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];
printf(&\n*******************************************\n&); printf(&****注册菜单\n&); printf(&*******************************************\n&);
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++]=
} pass[i]='\n'; */
p=_ while(p) {
if(strcmp(p-&name,name) == 0 && strcmp(p-&pass,pass) == 0)
} if(!p) {
printf(&****注册成功!\n&);
printf(&*******************************************\n&);
// 更新当前登陆的用户
strcpy(_loginPlayer.name,name);
strcpy(_loginPlayer.pass,pass);
// 添加一个新的玩家到玩家列表
p = (struct Player*)malloc(sizeof(struct Player));
p-&next = _
_players =
return 1; } else {
printf(&****注册失败!该用户名已经被注册!\n&);
printf(&*******************************************\n&);
return 0; } }void play(){ struct Game newGame, *p; char strChoice[100]; int
intC int guessP // 当前游戏的玩家为当前登陆的玩家
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++] = guessP
if(guessPrice == newGame.realPrice)
newGame.isSuccess = 1;
else if(guessPrice & newGame.realPrice)
printf(&****低了!\n&);
printf(&****高了!\n&);
} } // 记录猜价格游戏结束时间
newGame.endTime = time(NULL); // 判断猜价格结果
if(newGame.isSuccess == 1) {
printf(&****恭喜你猜出了真实价格!\n&);
printf(&****很遗憾,您没有猜出真实价格!真实价格为:%6d!\n&,newGame.realPrice); }
// 记录将本轮猜价格游戏
p = (struct Game*)malloc(sizeof(struct Game)); *p = newG p-&next = _ _games = printf(&*******************************************\n&);
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) {
} // 返回之前注销登录的账号
else if(intChoice==2) {
strcpy(_loginPlayer.name,&&);
strcpy(_loginPlayer.pass,&&);
}} void startGame(){
initPlayer(); initGame(); while(1) {
choice = printMainMenu();
switch(choice)
// 打印排行榜
printRankList();
// 清空排行榜
clearRankList();
// 用户登陆并开始游戏
if(printLoginMenu())
// 用户注册并开始游戏
if(printRegisterMenu())
// 用户退出游戏
savePlayer();
saveGame();
printf(&****命令错误!请重新输入命令!\n&);
}int main(int argc, char *argv[]){ startGame(); return 0;}
其他类似问题
为您推荐:
#include &stdio.h&
#include &stdlib.h&
#include &time.h&
#include &string.h&
/*不做错误处理,
不做程序结构考虑
只是一个破烂儿程序而已
VC2008和Dev C++应该能通过
VC6估计需要改改*/
int main()
typedef struct {char name[100];}Node, *PN
Node List[5] = {0};
Node node = {0};
printf(&输入名字:&);
scanf(&%s&, node.name);
srand((unsigned int)time(NULL));
int num= rand()%8999 + 1000;
int guess = 0, guessed = 0;
while (guess&10)
printf(&你猜是:&);
scanf(&%d&, &guessed);
if (guessed==num)
printf(&中了\n&);
node.score =
for (int i=0; i&5; i++)
if (!List[...
这个我去试试,有用就给分
晕...楼下的真有时间 就是实现复杂了点儿再说了 都构造函数了既然 C++还那么麻烦自己构造什么数据结构直接 vector sort find 不就解决了么....晕...
我觉得这个游戏本身不是什么难题,但是我现在不会有那么多时间耗在这上面来帮你写游戏,那样我的一小半天又没有了。百度的知道平台是用来大家相互交流问题的,你有难题如果我能解决我会很乐意帮你解决的,但不是像你这样自己什么都不管,直接把你的要求发上来,然后等别人帮你解答,这不就完全的伸手党一个吗?要是你在解决这个游戏的过程中有什么问题我会很乐意帮你的,但是对于完全的伸手党,还是自己劝你自己多动脑吧!
这个游戏的前半部分不难,我关键是不知道关于排行榜的保存,更新,清除以及查看和两部分之间怎么连接
c语言中的fopen()和fwrite()函数
你可以用来存储数据
之后还可以用来读出存储的数据,既然能写出程序的前半部分那么看下这两个文件操作的函数应该是能很快应用出来的,你可以试试!
排行榜的保存可以用文件实现,需要比较排名的时候将其读入特定的数据结构中再比较。。。
可惜好的随机函数我编不了。
随机请用srand+rand
这点我不知道就不用活了
我知道你是江师傅,对不。
是的。。。。
猜价格的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁- System Error
Discuz! System Error
已经将此出错信息详细记录, 由此给您带来的访问不便我们深感歉意.如何用c语言编写一个简单的连连看。因为要移植到ucgui上,最好是要图形化的方法。_百度知道
如何用c语言编写一个简单的连连看。因为要移植到ucgui上,最好是要图形化的方法。
提问者采纳
先评我为最佳答案吧,然后给我留个信箱,我发给你,是我&多&年前学C鼓倒的。交流一下
提问者评价
其他类似问题
为您推荐:
ucgui的相关知识
其他1条回答
你是理工的吧?
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言题目 有一个班级,4名学生,并且有4门课,请编程总平均成绩,以及第n个学生的成绩 在线等_百度知道
c语言题目 有一个班级,4名学生,并且有4门课,请编程总平均成绩,以及第n个学生的成绩 在线等
提问者采纳
#include&stdio.h&
#include&stdlib.h& void average(int *p,int n)
float sum=0,
p_end=p+n-1;
for(;p&=p_p++)
sum=sum+(*p);
aver=sum/n;
printf(&总平均成绩为:%5.2f\n&,aver);
void search(int(*p)[4],int n)
printf(&第%d个学生的成绩:\n&,n);
for(i=0;i&4;i++)
printf(&%d\t&,*(*(p+n)+i));
printf(&\n&);
system(&pause&);
int main()
int score[4][4];
int i,j,n;
for(i=0;i&4;i++)
for(j=0;j&4;j++)
printf(&请输入第%d个学生的第%d门课的成绩: &,i+1,j+1);
scanf(&%d&,&score[i][j]);
fflush(stdin);
average(*score,12);
printf(&请输入您需要查找的学生n: &);
scanf(&%d&,&n);
search(score,n);
return 0;}
提问者评价
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言课程设计题目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信