📄 mini-fooltrs 最简俄罗斯(一百多行).htm
字号:
<SPAN class=keyword><FONT color=#0000ff>return</FONT></SPAN> (<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN>)w;
}
<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN> SpeedX[10] = { 17, 15, 13, 11, 9, 7, 5, 4, 3, 2 }; <SPAN class=comment><FONT color=#008000>/* 速度级别 ....*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN> x = 3, y = 20, v = 0, level; <SPAN class=comment><FONT color=#008000>/* 全局定义:砖块的坐标,速度 .....*/</FONT></SPAN>
Block A, B, C; <SPAN class=comment><FONT color=#008000>/* 全局定义:A, B, C三个活动砖块 ..*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN> GameDriver(<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN>);
<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN> GameView(<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN>);
<SPAN class=comment><FONT color=#008000>/*---------------------------------------------------------------------
// 游戏逻辑核心(重要): 每秒循环18.2次,处理砖块移动/下落/消除等逻辑
//---------------------------------------------------------------------*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN> GameMain(<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN>)
{
<SPAN class=keyword><FONT color=#0000ff>long</FONT></SPAN> key, i, j, m, n, old_time = 0; <SPAN class=comment><FONT color=#008000>/* 定义各变量 .........*/</FONT></SPAN>
CreateBlock(&A); CreateBlock(&C); <SPAN class=comment><FONT color=#008000>/* 初始化砖块 .........*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (GameMode = 0, v = SpeedX[GameSpeed]; GameMode == 0; TimePass++)
{
<SPAN class=keyword><FONT color=#0000ff>while</FONT></SPAN> (clock() == old_time); <SPAN class=comment><FONT color=#008000>/* 速度控制,clock()为 18.2Hz ..*/</FONT></SPAN>
old_time = clock();
nosound();
key = readkey(); <SPAN class=style4><FONT color=#008200>/* 读入一个键盘消息 ............*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff> if</FONT></SPAN> (key == 75) <SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (BlockCheck(x - 1, y, &A)) x--; <SPAN class=comment><FONT color=#008000>/* 左移 ...*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (key == 77) <SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (BlockCheck(x + 1, y, &A)) x++; <SPAN class=comment><FONT color=#008000>/* 右移 ...*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (key == 80) v = 0; <SPAN class=comment><FONT color=#008000>/* 下落: SET v = 0 ....*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (key == ' ') { <SPAN class=comment><FONT color=#008000>/* 直接下落 ...........*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i = y; i >= 0; i--) <SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (!BlockCheck(x, i - 1, &A)) <SPAN class=keyword><FONT color=#0000ff>break</FONT></SPAN>;
y = i; v = 0;
}
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (key == 27) GameMode = 1; <SPAN class=comment><FONT color=#008000>/* ESC: 退出游戏 ......*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (key == 72) { <SPAN class=comment><FONT color=#008000>/* UP: 转动砖块 .......*/</FONT></SPAN>
Rotate(&A, &B);
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (BlockCheck(x, y, &B)) A = B;
}
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (--v <= 0) { <SPAN class=comment><FONT color=#008000>/* 到达了下落的时间 .......*/</FONT></SPAN>
v = SpeedX[GameSpeed]; <SPAN class=comment><FONT color=#008000>/* 重置砖块速度 ...........*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (BlockCheck(x, y - 1, &A) == 0) {<SPAN class=comment><FONT color=#008000>/* 如果到达map底部 ....*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i=0, m=y; i<4; i++,m--) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j=0,n=x; j<4; j++,n++)
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (MapCheck(n,m)==0 && A.d[i][j]) <SPAN class=comment><FONT color=#008000>/* 将A复制到map */</FONT></SPAN>
map[m][n] = A.d[i][j];
A = C; <SPAN class=comment><FONT color=#008000>/* 将C复制到A .........*/</FONT></SPAN>
CreateBlock(&C); <SPAN class=comment><FONT color=#008000>/* 创建新的C砖块 ......*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (y >= 20) GameMode = -1; <SPAN class=comment><FONT color=#008000>/* 判断死亡 ...........*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>else</FONT></SPAN> y = 20, x = 3;
GameDriver(); <SPAN class=comment><FONT color=#008000>/* 消除完成的行 .......*/</FONT></SPAN>
} <SPAN class=keyword><FONT color=#0000ff>else</FONT></SPAN> y--; <SPAN class=comment><FONT color=#008000>/* 否则:下降 .........*/</FONT></SPAN>
}
GameView(); <SPAN class=comment><FONT color=#008000>/* 显示: 更新屏幕 .....*/</FONT></SPAN>
}
<SPAN class=style1><FONT color=#0000ff>while</FONT></SPAN> (kbhit()) getch(); <SPAN class=style4><FONT color=#008200>/* 按任意键结束 .......*/</FONT></SPAN>
<SPAN class=style1><FONT color=#0000ff>while</FONT></SPAN> (!kbhit());
nosound(); <SPAN class=style4><FONT color=#008200>/* 关闭扬声器 .........*/</FONT></SPAN>
}
<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN> GameDriver(<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN>) <SPAN class=comment><FONT color=#008000>/* 处理消除行 ..............................*/</FONT></SPAN>
{
<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN> inc[5]={10,100,300,600,1000}, count = 0, x, y, k, i, j;
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (y = 0; y < 25; y++) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (; ; count++) { <SPAN class=comment><FONT color=#008000>/* 扫描map测试消行 ...*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (x = 0, k = 0; x < 10; x++) k += (map[y][x])? 1 : 0;
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (k < 10) <SPAN class=keyword><FONT color=#0000ff>break</FONT></SPAN>; <SPAN class=comment><FONT color=#008000>/* 计算一行是否可以消去 .......*/</FONT></SPAN>
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j = y; j < 25; j++) memcpy(map[j], map[j+1], 10 * <SPAN class=keyword><FONT color=#0000ff>sizeof</FONT></SPAN>(<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN>));
}
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> ((GameScore / 10000) != ((GameScore + inc[count]) / 10000))
GameSpeed = (GameSpeed + 1) % 10; <SPAN class=comment><FONT color=#008000>/* 计算速度升级 ...........*/</FONT></SPAN>
GameScore += inc[count]; <SPAN class=comment><FONT color=#008000>/* 计算新的分数 ...........*/</FONT></SPAN>
sound((count == 0)? 75 : 900);
}
<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN> GameView(<SPAN class=keyword><FONT color=#0000ff>void</FONT></SPAN>) <SPAN class=comment><FONT color=#008000>/* 绘制:将map里面的砖块绘制到屏幕 .........*/</FONT></SPAN>
{
<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN> i, j, m, n;
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i=0; i<10; i++) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j=0; j<20; j++) <SPAN class=comment><FONT color=#008000>/* 更新TextBck二级缓存 ..*/</FONT></SPAN>
TextBck[j][i] = map[j][i];
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i=0, n=x; i<4; i++, n++) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j = 0, m=y; j < 4; j++, m--)
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (m>=0&&m<20 && n>=0&&n<10 && A.d[j][i]) TextBck[m][n] = A.d[j][i];
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i = 0; i < 10; i++) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j = 0; j < 20; j++) { <SPAN class=comment><FONT color=#008000>/* 显示地图 ...*/</FONT></SPAN>
m = TextBck[19 - j][i], n = i * 2;
SCREEN(n+1,j+1) = (m)? <SPAN class=style2><FONT color=#ff00ff>'['</FONT></SPAN>:<SPAN class=style2><FONT color=#ff00ff>'.'</FONT></SPAN>, SCOLOR(n+1,j+1) = (m)? cmap[m] : 8;
SCREEN(n+2,j+1) = (m)? <SPAN class=style2><FONT color=#ff00ff>']'</FONT></SPAN>:<SPAN class=style2><FONT color=#ff00ff>'.'</FONT></SPAN>, SCOLOR(n+2,j+1) = (m)? cmap[m] : 8;
}
<SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (j = 0; j < 4; j++) <SPAN class=keyword><FONT color=#0000ff>for</FONT></SPAN> (i = 0; i < 4; i++) { <SPAN class=comment><FONT color=#008000>/* 显示下个砖块*/</FONT></SPAN>
m = C.d[j][i], n = 160 * (j + 8) + 4 * i + 58;
TextBuf[n+0] = (m)? <SPAN class=style2><FONT color=#ff00ff>'['</FONT></SPAN>:<SPAN class=style2><FONT color=#ff00ff>'.'</FONT></SPAN>, TextBuf[n+1] = (m)? cmap[m] : 8;
TextBuf[n+2] = (m)? <SPAN class=style2><FONT color=#ff00ff>']'</FONT></SPAN>:<SPAN class=style2><FONT color=#ff00ff>'.'</FONT></SPAN>, TextBuf[n+3] = (m)? cmap[m] : 8;
}
<SPAN class=keyword><FONT color=#0000ff>if</FONT></SPAN> (TimePass & 3) <SPAN class=keyword><FONT color=#0000ff>return</FONT></SPAN>;
textcolor(<SPAN class=style3><FONT color=#666666>0xa</FONT></SPAN>-8);
gotoxy(30,1); printf(<SPAN class=style2><FONT color=#ff00ff>"POSITION: [%2d,%2d]"</FONT></SPAN>, x, y); <SPAN class=comment><FONT color=#008000>/* 显示分数等 .*/</FONT></SPAN>
gotoxy(30,2); printf(<SPAN class=style2><FONT color=#ff00ff>"SPEED: %d"</FONT></SPAN>, GameSpeed);
gotoxy(30,6); printf(<SPAN class=style2><FONT color=#ff00ff>"SCORE: "</FONT></SPAN>); cprintf(<SPAN class=style2><FONT color=#ff00ff>"%ld"</FONT></SPAN>, GameScore);
gotoxy(30,5); printf(<SPAN class=style2><FONT color=#ff00ff>"TIME: "</FONT></SPAN>); <SPAN class=comment><FONT color=#008000>/* 显示时间 ...*/</FONT></SPAN>
m = (<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN>)(TimePass / 18.2) / 60, n = (<SPAN class=keyword><FONT color=#0000ff>int</FONT></SPAN>)(TimePass / 18.2) % 60;
cprintf(<SPAN class=style2><FONT color=#ff00ff>"%d%d:%d%d"</FONT></SPAN>, (m/10), (m%10), (n/10), (n%10));
gotoxy(1, 23);
}
</PRE><BR></FONT></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD width="100%" height=25>
<DIV align=center>
<CENTER>点击图标下载附件<BR><A title=点击这里下载
href="http://www.cstudyhome.com/wenzhang06/uploadfile/5493-1.rar"
target=_blank><IMG
src="MINI-FOOLTRS 最简俄罗斯(一百多行)_files/rar.gif"
border=0></A></CENTER></DIV></TD></TR>
<TR>
<TD width=255 height=20><A class=bottom
href="http://www.cstudyhome.com/wenzhang06/review.asp?NewsID=5493"
target=_blank> <IMG
height=18 src="MINI-FOOLTRS 最简俄罗斯(一百多行)_files/icon1.gif"
width=18 border=0> <FONT color=blue>发表评论</FONT></A>
</TD></TR>
<TR>
<TD width="100%">
<HR SIZE=1>
</TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD width="100%" height=18><B>相关专题:</B>
<TR>
<TD width="100%">
<HR SIZE=1>
</TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD width="100%" height=18><B>相关信息:</B></TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD width="100%"> 没有相关信息</TD></TR>
<TR>
<TD width="100%">
<HR SIZE=1>
</TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD width="100%"><B>相关评论:</B></TD></TR>
<TR>
<TD height=8></TD></TR>
<TR>
<TD width="100%"></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
border=0>
<TBODY>
<TR bgColor=#d1e4fc>
<TD
width="100%">发表人:快乐的飞 发表人邮件:<A
href="mailto:lf17336096@163.com">lf17336096@163.com</A> 发表时间:2005-5-16
19:41:56</TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -