| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1907 人关注过本帖, 1 人收藏
标题:[灌水]打字游戏
只看楼主 加入收藏
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏(1)
 问题点数:0 回复次数:9 
[灌水]打字游戏
/* 标准文档模板 */ #include <string.h> #include "Stdio.h" #include <stdlib.h> #include "Conio.h" #define MAX 200000L/*MAX可以调整游戏的速度*/ typedef struct link{char *str;int x;int y;}link; void down(char *s,int x,int *y); /*让一个单词下降*/ void check(char *s); /*检查输入是否正确*/ void getouts(); /*到达底线的单词出队*/ void putins(char *s); /*单词表新单词入队*/ void getcheck(); /*输入单词并调用check()检查*/ void endgame1(); /*结束游戏,输出统计结果*/ void first(); /*初始化工作*/ void timed1(); /*游戏进行函数,负责调用alldown()和getcheck()*/ void alldown(); /*所有单词下降*/ void whit(char *none,char *s2); /*生成课覆盖s2的串none*/ void clean(char *s,int x,int y); /*清除屏幕上的一个单词*/ /***********************************/ link data[100];/*单词队列,存放屏幕上的单词信息,一滚动数组为数据结构*/ int top,botton,count,top1; /*top=队尾;botton=队首;count=记数;top1=单词表的长度*/ char string1[200][15],da[16]; /*string1=单词表,da键盘输入记录 */ FILE *fi; /**************************************************/ void whit(char *none,char *s2) {int v; v=strlen(s2); none[v]='\0'; while(v--) none[v]=' ';} /**************************************************/ void check(char *s) {int i; for(i=botton;i!=top;i++,i=i%100) {if(!strcmp(s,data[i].str)) {count++; clean(data[i].str,data[i].x,data[i].y); data[i].str=0; break;}}} /**************************************************/ void clean(char *s,int x,int y) {char none[15]; /*none=用于覆盖的空串*/ whit(none,s); gotoxy(x,y); cputs(none);} /**************************************************/ void down(char *s,int x,int *y) {clean(s,x,*y);*y=*y+1; gotoxy(x,*y); cputs(s); } /**************************************************/ void putins(char *s) {data[top].str=s; data[top].x=random(50)+5; data[top].y=0; top++; top=top%100;} /**************************************************/ void getouts() {clean(data[botton].str,data[botton].x,data[botton].y); data[botton].str=0; data[botton].x=0; data[botton].y=0; botton++; botton=botton%100;} /**************************************************/ void alldown() {int i; for(i=botton;i!=top;i++,i=i%100) {down(data[i].str,data[i].x,&data[i].y);}} /**************************************************/ void first() {int i;char s[15]; top=0; botton=0; count=0; fi=fopen("data.sav","r"); i=0; while(fscanf(fi,"%s",s)==1) {strcpy(string1[i],s);i++;} top1=i; fclose(fi);} /**************************************************/

[此贴子已经被作者于2005-2-3 16:48:58编辑过]

搜索更多相关主题的帖子: 游戏 灌水 打字 
2005-02-03 12:34
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
void getcheck() {char c; long i; static int len=0; textcolor(GREEN); for(i=0;i<MAX;i++) {c=kbhit(); if(!c)continue; c=getch(); if(c==13) {check(da); len=0; gotoxy(20,24); cputs(" "); continue;} if(c==8) {if(len)da[--len]='\0'; gotoxy(20,24); cputs(" ");} else{ if(len<15)da[len]=c; len++; da[len]='\0';}/*else*/ gotoxy(20,24); cputs(da);} /*for*/ textcolor(YELLOW);} /**************************************************/ void timed1(int maxt,int bot) {int t=0; gotoxy(1,bot+2); cputs("00000000000000000000000000000000000000000000000000000000000000000000000000000000"); while(maxt--) {putins(string1[t++]); if(t>=bot)getouts(); alldown(); gotoxy(2,bot+3); printf("%d ",maxt); getcheck(); }} /**************************************************/ void endgame1() {clrscr(); textcolor(RED); gotoxy(17,10); cprintf("You have got:"); gotoxy(17,13); printf("%d",count); gotoxy(17,15); cprintf("words"); } /*************************************************/ int main(void) {int i; textcolor(YELLOW); randomize(); first(); timed1(30,20); /*两个参数,前一个调整运行时间,后一个调整单词下落的底线高度*/ endgame1(); getch(); getch(); return 0;}

[此贴子已经被作者于2005-2-3 16:31:33编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-02-03 12:37
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
单词表需要有一个data.sav的文件提供
把下面这些单词拷进一个文本,再保存为data.sav就可以了。WIN-TC下编译通过
poor
ride
save
street
table
teeth
tower
ticket
deal
wake
small
cat
fault
angel
boat
breath
beer
call
club
card
corner
country
cow
even
degree
dog
dollar
dream
drop
fat
fish
furniture
God
guest
history
home
line
lion
look
loud
million
month
parrot
part
fall
couple
apple
kiss
crow

[此贴子已经被作者于2005-2-3 12:41:05编辑过]



我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-02-03 12:38
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

问题多多地:

问题1:[浪费内存] char string1[200][15],da[15],whit[15]=" "; 这一句:char whit[15]=" "; whit只是一个串空格,我想没有必要给他分配15个字节,太浪费宝贵的内存了。 char whit[]=" ";就可以了。

问题2:[定义变量时候思路混乱] void check(char *s); /*检查输入是否正确*/ 既然你已经把字符串da定义为全局变量了,那就没有必要在定义check()的时候定义参数了,因为check()可以随时访问da

问题3:[不检查字符串da的大小] 在getcheck()函数中有这么一段: else{ da[len]=c; 作用是把用户的击中的字符加入到da中,但是da是一个大小固定为15的数组,所以一旦用户输入的字符大于15后,将会发生内存溢出!

问题4:[da数组没有被及时清空] 每次check完之后请清空一次da数组.

问题5:[过长的代码行] cputs("00000000000000000000000000000000000000000000000000000000000000000000000000000000");

很明显,谁都讨厌看见这样长的代码,其实可以用循环来解决这个问题 for(t=0;t<80;t++) cprintf("0"); t=0;

问题6: [随即数问题] data[top].x=random(50)%50+5; 我不明白你是怎么想的,但是我觉得data[top].x=random(65); 这样做会更好。

问题7:[整个程序不美观] 一个好的程序要求的不仅仅是逻辑上的完整,更加要求结构上的完美。这个程序说真的,长得比KNOCKER还XX,这样会让那些有心去看代码的人望而却步!

尚未解决的问题: 1.[字符乱码问题] 2.[如果输入了掉落字符串的上面一个字符串的时候,有时会出现两个一起消失]


淘宝杜琨
2005-02-03 14:24
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

谢谢神的批评,我刚才对代码进行了一些修正
问题1:[浪费内存]
我已经取消了whit串,而加入函数whit生成正好合适空串
问题2:[定义变量时候思路混乱]
这是我编程时候的疏忽,我先写了check函数,为了更普遍,用了参数*s,
因为没什么大问题,这阳也比较容易看懂,这个缺点没有修改
问题3:[不检查字符串da的大小]
已经改正
问题4:[da数组没有被及时清空]
其实da没有清空的必要,标记len=0就相当于清空了
问题5:[过长的代码行]
这个因为一看就懂,没有修改……
问题6: [随即数问题]
已经修改成random(50)+5;我想让字母接近屏幕中间些;
问题7:[整个程序不美观]
刚才可真累死我……
WIN-TC导出的HTML拷到帖子里一开始一团糟——换行都没了
(是不是论坛BUG?)
最后还是编辑好了……尽力解决了一定程度上的外表美观问题……
代码美观可就有些难了……
尚未解决的问题:
1.[字符乱码问题]
2.[如果输入了掉落字符串的上面一个字符串的时候,有时会出现两个一起消失]
乱码?我TEST的时候没出现过,
2可能是我原来在清除字符串的时候用down函数的原因,现在加入clean函数,
TEST问题好象没再出现了

PS:knocker应该长得比较漂亮吧?

[此贴子已经被作者于2005-2-3 16:51:17编辑过]



我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-02-03 16:47
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
哈哈,本人长得不漂亮,但是比较帅!

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-02-03 19:19
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
看把你美得~~~

淘宝杜琨
2005-02-03 21:37
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
问题6: [随即数问题] data[top].x=random(50)%50+5; 我不明白你是怎么想的,但是我觉得data[top].x=random(65); 这样做会更好。 这里不应该是55吗? 65就不懂了!

2005-02-04 11:53
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
哦,是55才符合乌鸦原来的取值范围,但是我想55也太少了,就主动帮他+到了65

淘宝杜琨
2005-02-04 13:32
抱着猫猫睡
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-2-22
收藏
得分:0 
打字游戏。。。

2006-02-22 10:04
快速回复:[灌水]打字游戏
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017192 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved