感谢上外静中任淳同学提供
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 ...
随机推荐
- 如何在CentOS 7.x中安装OpenERP(Odoo)
各位好,这篇教程关于的是如何在CentOS 7中安装Odoo(就是我们所知的OpenERP).你是不是在考虑为你的业务安装一个不错的ERP(企业资源规划)软件?那么OpenERP就是你寻找的最好的程序 ...
- js动画之简单运动一
虽然现在css3已经有了很多动画效果希望后面有时间也写一些博客,但是先开始我们的基础动画的学习. 1.制作动画常用的属性就是left,right,height,width,opacity等属性 2.因 ...
- C# 顺序高斯(Gauss)消去法计算一元多次方程组
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- UITableViewCell左对齐的方法
if ([TabelView respondsToSelector:@selector(setLayoutMargins:)]) { [TabelView setLayoutMargin ...
- Gradle for Android
1.project vs project.rootProject 2.System.console() != null ? System.console().readPassword("\n ...
- Scalding初探之二:动手来做做小实验
输入文件 Scalding既可以处理HDFS上的数据,也可以很方便地在本地运行处理一些test case便于debug,Source有好多种 1 TextLine(filename) TextLine ...
- C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符
重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...
- POJ 1094 (TopoSort)
http://poj.org/problem?id=1094 题意:该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序 ...
- webpack 代码拆分,按需加载
转自:https://segmentfault.com/a/1190000007649417?utm_source=weekly&utm_medium=email&utm_campai ...
- Android——什么是3G
第三代数字通讯技术(3id Generation) 3G与2G的主要区别是:在传输声音和数据的速度上的提升. 1995年问世的第一代模拟制式手机1G只能进行语音通话. 1996年出现的第二代GSM C ...