感谢上外静中任淳同学提供
uses crt;
label
h; //h是重新开始游戏
const
y1=18;
y2=18; //p1,p2的纵坐标
var
x1,x2:byte; //p1,p2的横坐标
act:byte; //p2动作
sec,sec1:integer; //时间间隔
p,q:byte; //p1,p2的生命值
ek:byte; //用于增强p2防御力
c:char; //用于读取键盘敲击的键
m,e:char; //p1,p2的朝向(判断往哪里攻击)
i,j:byte; //循环变量
ys1,ys2:byte; //p1,p2的颜色
l,r:boolean; //l:p1是否胜利 r:p2是否胜利
f:boolean; //游戏是否结束
y,n:boolean; //判断玩家是否继续
procedure start;
begin
clrscr;
textcolor(lightmagenta);
writeln('Fighting Game');
textcolor(magenta);
writeln('a: left');
writeln('d: right');
writeln('j: attack');
writeln('space: pause');
textcolor(yellow);
writeln('You are p1.');
while not keypressed do x1:=10;
clrscr;
textcolor(lightgreen);
gotoxy(34,10);
write('ARE YOU READY? '); //倒计时
textcolor(lightred);
for i:=3 downto 1 do begin
write(i);
sound(100);
delay(1000);
write(#8);
nosound;
end;
clrscr;
textcolor(lightblue);
gotoxy(40,10);
write('GO!');
sound(1000);
delay(1000);
nosound;
clrscr;
end;
procedure life; //打印生命值
begin
p:=10;
q:=10;
gotoxy(11,1);
textcolor(ys1);
for i:=1 to p do write('+');
gotoxy(33,1);
write('p1');
textcolor(lightred);
write(' VS ');
textcolor(ys2);
write('p2');
gotoxy(61,1);
for i:=1 to q do write('+');
end;
procedure me; //打印p1
begin
textcolor(ys1);
gotoxy(x1,y1-1);
write('*');
gotoxy(x1,y1);
write('|');
gotoxy(x1,y1+1);
write('^');
end;
procedure enemy; //打印p2
begin
textcolor(ys2);
gotoxy(x2,y2-1);
write('*');
gotoxy(x2,y2);
write('|');
gotoxy(x2,y2+1);
write('^');
end;
procedure floor; //地板
begin
textbackground(green);
for i:=20 to 25 do
for j:=1 to 80 do begin
gotoxy(j,i);
write(' ');
end;
textbackground(black);
end;
procedure a; //p1向左
begin
if x1>1 then begin
gotoxy(x1,y1-1);
write(' ');
gotoxy(x1,y1);
write(' ');
gotoxy(x1,y1+1);
write(' ');
x1:=x1-1;
end;
m:='a';
me;
enemy;
end;
procedure d; //p1向右
begin
if x1<80 then begin
gotoxy(x1,y1-1);
write(' ');
gotoxy(x1,y1);
write(' ');
gotoxy(x1,y1+1);
write(' ');
x1:=x1+1;
end;
m:='d';
me;
enemy;
end;
procedure s; //p1攻击
begin
textcolor(ys1);
if (m='a') and (x1>1) then begin
gotoxy(x1-1,y1);
write('-');
if x1>=3 then begin
gotoxy(x1-2,y1);
write('(');
end;
if (x1-1=x2) or (x1-2=x2) then begin
ek:=ek+1;
if (q>0) and (ek=10) then begin
q:=q-1;
ek:=0;
end;
gotoxy(70-q,1);
write(' ');
textcolor(lightred);
gotoxy(x2,y2-1);
write('*');
gotoxy(x2,y2+1);
write('^');
delay(50);
end;
delay(50);
gotoxy(x1-1,y1);
write(' ');
if x1>=3 then begin
gotoxy(x1-2,y1);
write(' ');
end;
end
else if (x1<80) and (m='d') then begin
gotoxy(x1+1,y1);
write('-');
if x1<=78 then write(')');
if (x1+1=x2) or (x1+2=x2) then begin
ek:=ek+1;
if (q>0) and (ek=10) then begin
q:=q-1;
ek:=0;
end;
gotoxy(70-q,1);
write(' ');
textcolor(lightred);
gotoxy(x2,y2-1);
write('*');
gotoxy(x2,y2+1);
write('^');
delay(50);
end;
delay(50);
gotoxy(x1+1,y1);
write(' ');
if x1<=78 then begin
gotoxy(x1+2,y1);
write(' ');
end;
end;
if q=0 then begin
f:=false;
r:=false;
end;
me;
enemy;
end;
procedure je; //p2向左
begin
if x2>1 then begin
gotoxy(x2,y2-1);
write(' ');
gotoxy(x2,y2);
write(' ');
gotoxy(x2,y2+1);
write(' ');
x2:=x2-1;
end;
e:='j';
me;
enemy;
end;
procedure le; //p2向右
begin
if x2<80 then begin
gotoxy(x2,y2-1);
write(' ');
gotoxy(x2,y2);
write(' ');
gotoxy(x2,y2+1);
write(' ');
x2:=x2+1;
end;
e:='l';
me;
enemy;
end;
procedure k; //p2攻击
begin
textcolor(ys2);
if (e='j') and (x2>1) then begin
gotoxy(x2-1,y2);
write('-');
if x2>=3 then begin
gotoxy(x2-2,y2);
write('(');
end;
if (x2-2=x1) or (x2-1=x1) then begin
if p>0 then p:=p-1;
gotoxy(11+p,1);
write(' ');
textcolor(lightred);
gotoxy(x1,y1-1);
write('*');
gotoxy(x1,y1+1);
write('^');
delay(50);
end;
delay(50);
gotoxy(x2-1,y2);
write(' ');
if x2>=3 then begin
gotoxy(x2-2,y2);
write(' ');
end;
end
else if (e='l') and (x2<80) then begin
gotoxy(x2+1,y2);
write('-');
if x2<=78 then begin
gotoxy(x2+2,y2);
write(')');
end;
if (x2+1=x1) or (x2+2=x1) then begin
if p>0 then p:=p-1;
gotoxy(11+p,1);
write(' ');
textcolor(lightred);
gotoxy(x1,y1-1);
write('*');
gotoxy(x1,y1+1);
write('^');
delay(50);
end;
delay(50);
gotoxy(x2+1,y2);
write(' ');
if x2<=78 then write(' ');
end;
if p=0 then begin
f:=false;
l:=false;
end;
me;
enemy;
end;
begin //主程序
cursoroff;
randomize;
h:l:=true; //判断p1胜利
r:=true; //判断p2胜利
f:=true; //判断游戏是否结束
sec:=(random(2)+1)*50; //p2动作时间间隔
sec1:=0; //时间间隔
x1:=10; //p1横坐标位置
m:='d'; //p1面向的方向(d右,a左)
ys1:=14; //定义p1的颜色(黄色)
x2:=71; //p2横坐标位置
e:='j'; //p2面向的方向(l右,j左)
ys2:=8; //定义p2的颜色(暗灰色)
start; //操作说明
life; //显示生命值
me; //显示p1
enemy; //显示p2
floor; //显示地板
while f do begin
if keypressed then begin
c:=readkey;
if c=' ' then begin
gotoxy(38,12);
textcolor(lightmagenta);
write('PAUSE');
c:='p';
while c<>' ' do
if keypressed then c:=readkey;
gotoxy(38,12);
write(' '); //擦除'pause'
end; //暂停
if c='a' then a;
if c='d' then d;
if c='j' then s; //左右和攻击
end;
delay(5);
sec1:=sec1+5; //时间暂停
if sec1>=sec then begin //随机时间间隔到达后
sec1:=0;
sec:=(random(2)+1)*50;
act:=random(2);
if abs(x1-x2)>=3 then
begin
if x2<x1 then le else je;
end //判断p1朝哪个方向走
else //当p1,p2间距小于3,即x1,x2在攻击范围内时
begin
if x1<x2 then //p1在p2左面
if e='l' then le //p2背对p1时
else k //p2正对p1时
else if x2<x1 then //p1在p2右面
if e='j' then je //p2背对p1时
else k //p2正对p1时
else if x2=x1 then //p1,p2重叠时
case act of
0: je;
1: le;
end; //在p1,p2在同一位置时控制p2离开
end;
end;
end;
delay(500);
sound(100); //以下是判断p1,p2哪方胜利还是平手
if l then begin //如果p1胜利
gotoxy(x2,y2-1);
write(' ');
gotoxy(x2,y2);
write(' ');
gotoxy(x2,y2+1);
write(' ');
textcolor(ys2);
gotoxy(x2-1,y2+1);
write('>-*');
delay(2000);
nosound;
clrscr;
sound(1000);
textcolor(yellow);
gotoxy(37,10);
write('YOU WIN!');
end
else if r then begin //如果p2胜利
gotoxy(x1,y1-1);
write(' ');
gotoxy(x1,y1);
write(' ');
gotoxy(x1,y1+1);
write(' ');
textcolor(ys1);
gotoxy(x1-1,y1+1);
write('*-<');
delay(2000);
nosound;
clrscr;
sound(1000);
textcolor(lightred);
gotoxy(37,10);
write('YOU LOSE');
end
else begin //平手
gotoxy(x1,y1-1);
write(' ');
gotoxy(x1,y1);
write(' ');
gotoxy(x1,y1+1);
write(' ');
gotoxy(x2,y2-1);
write(' ');
gotoxy(x2,y2);
write(' ');
gotoxy(x2,y2+1);
write(' ');
textcolor(ys1);
gotoxy(x1-1,y1+1);
write('*-<');
textcolor(ys2);
gotoxy(x2-1,y2+1);
write('>-*');
delay(2000);
nosound;
clrscr;
sound(1000);
textcolor(lightgreen);
gotoxy(36,10);
write('nobody wins');
end;
delay(5000);
nosound; //以下为判断是否继续
clrscr;
y:=true;
n:=false;
textcolor(7);
gotoxy(38,11);
write('REPLAY?');
gotoxy(24,12);
write('(A: right D: left Enter: dicide)');
while c<>#13 do begin
gotoxy(36,13);
if y then textcolor(blink) else textcolor(7);
write('yes');
textcolor(7);
write(' ');
if n then textcolor(blink) else textcolor(7);
write('no');
if keypressed then begin
c:=readkey;
if c='a' then begin
y:=true;
n:=false;
end
else if c='d' then begin
y:=false;
n:=true;
end
else if c=#13 then
if y then goto h; //重新开始
end;
end;
end.
- HDU4930 Fighting the Landlords 模拟
Fighting the Landlords Fighting the Landlords Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- Z - Fighting 和 Depth-bias
Depth-bias操作在clipping之后进行实施,所以depth-bias对几何clipping没有影响. 另外需要注意的是:对一个给定体元(primitive),bias值是一个常量,在进行差 ...
- Codeforces Gym 100015F Fighting for Triangles 状压DP
Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...
- hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...
- URAL 2025. Line Fighting (math)
2025. Line Fighting Time limit: 1.0 second Memory limit: 64 MB Boxing, karate, sambo- The audience i ...
- 【翻唱】Keep On Fighting
http://video.yingtu.co/0/77868591-502c-4af1-853b-d313e83c94a9.mp4 Keep On Fighting
- hdu4930 Fighting the Landlords(模拟 多校6)
题目链接:pid=4930">http://acm.hdu.edu.cn/showproblem.php? pid=4930 Fighting the Landlords Time L ...
- HDU 4930 Fighting the Landlords(扯淡模拟题)
Fighting the Landlords 大意: 斗地主... . 分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black ...
- Fighting regressions with git bisect---within git bisect algorithm
https://www.kernel.org/pub/software/scm/git/docs/git-bisect-lk2009.html Fighting regressions with gi ...
随机推荐
- OC语言类的本质和分类
OC语言类的深入和分类 一.分类 (一)分类的基本知识 概念:Category 分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...
- 微信、QQ浏览器X5内核问题汇总
一. 资料汇总 1.前端H5调起QQ浏览器的总结:http://km.oa.com/group/22486/articles/show/210189?kmref=search 2.Android We ...
- PowerMock遇到的问题——5
在做单元测试时,有时在一个方法中会调用这个类的其他私有方法,那么如何指定这些方法的返回值呢? 解决方法:用 createPartialMock 具体用法如下: TestClass test=Power ...
- 【0 - 1】OC内存管理
一.内存管理概述 垃圾回收机制(GC):由系统管理内存,程序员不需要管理. OC中的垃圾回收:在OC2.0版加入垃圾回收. OC与iOS:OC有垃圾回收机制,但是iOS屏蔽了这个功能.原因:iOS运行 ...
- HDU 1198(并查集)
题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...
- PL/SQL工具连接ORALCE数据库的方法
http://www.cnblogs.com/dongzhiquan/archive/2011/11/21/2257629.html 1.利用ORACLE NET MANAGER工具 1)打开 ORA ...
- [Spring] - Property注入
使用Spring注入Properies文件方法: 1.src中新建一个settings.properties文件,内容如下: db_driverClassName=com.mysql.jdbc.Dri ...
- unix exec族函数 关于参数的疑惑
问题不出在这几个函数,而在于看后文解释器的时候发现一个很奇妙的问题. #include <unistd.h> int execl(const char *pathname, const c ...
- Sprint第二个冲刺(第十二天)
一.Sprint 计划会议: 现在商家上传商品的图片的功能已经完成了,正在准备是实现更新商品图片.更新商品价格和商品描述得功能,目前工作进展顺利,进度也慢慢赶上,争取顺利完成目标. 下面是真机测试下的 ...
- ajax data数据里面传一个json到后台的写法
$.ajax({ url:url+"/crm/contact", type:'PUT', ...