感谢上外静中任淳同学提供
 
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.

Fighting Game的更多相关文章

  1. HDU4930 Fighting the Landlords 模拟

    Fighting the Landlords Fighting the Landlords Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  2. Z - Fighting 和 Depth-bias

    Depth-bias操作在clipping之后进行实施,所以depth-bias对几何clipping没有影响. 另外需要注意的是:对一个给定体元(primitive),bias值是一个常量,在进行差 ...

  3. Codeforces Gym 100015F Fighting for Triangles 状压DP

    Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...

  4. 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 ...

  5. URAL 2025. Line Fighting (math)

    2025. Line Fighting Time limit: 1.0 second Memory limit: 64 MB Boxing, karate, sambo- The audience i ...

  6. 【翻唱】Keep On Fighting

    http://video.yingtu.co/0/77868591-502c-4af1-853b-d313e83c94a9.mp4 Keep On Fighting

  7. hdu4930 Fighting the Landlords(模拟 多校6)

    题目链接:pid=4930">http://acm.hdu.edu.cn/showproblem.php? pid=4930 Fighting the Landlords Time L ...

  8. HDU 4930 Fighting the Landlords(扯淡模拟题)

    Fighting the Landlords 大意: 斗地主... . 分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black ...

  9. 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 ...

随机推荐

  1. windows 7 32bit安装 python3.5.0 安装错误 0x80240017 -未指定错误

    日志显示如下: [0F60:03D4][2015-10-20T10:47:52]i001: Burn v3.10.0.1823, Windows v6.1 (Build 7600: Service P ...

  2. C#学习笔记----枚举、结构、方法及构造函数的总结

    一.枚举 语法: [public] enum 枚举名 { 值1, 值2, 值3, ........ } public:访问修饰符.公开的公共的,哪都可以访问. enum:关键字,声明枚举的关键字 枚举 ...

  3. 《Java中的自动装箱和拆箱功能.》

    //Java中的自动装箱和拆箱功能. class AutoboxingUnboxing { public static void main(String[] args) { //直接把一个基本类型变量 ...

  4. 关于jsonp跨域过程中 cookie中的值一直为null的原因

    今天技术交流群里的小伙伴一直被一个问题而困扰,就是写入cookie里面的值 再次进行请求时 cookie 就为空了 他被问题纠结了一天  我也好奇了一天 终于在快下班的时候 他解决掉了 下面我来收一个 ...

  5. 【第一篇】Android环境搭建

    安装不易,且安且珍惜! 1 下载 Java JDK (http://java.sun.com/javae/downloads/ ) (Windows 版) [配置环境变量]:安装完成后,设置JAVA_ ...

  6. 在Hibernate中配置Hilo进行数据绑定测试时出错:org.hibernate.MappingException: Could not instantiate id generator

    在进行学习具体类单表继承时使用hilo类型时总是在调度过程中提示如下信息,无法通过.留下记录备查. 在网上找相关信息, 未解决,详细如下: org.hibernate.MappingException ...

  7. HDU 1198(并查集)

    题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...

  8. [转]http://lua-users.org/wiki/LpegTutorial

    Simple Matching LPeg is a powerful notation for matching text data, which is more capable than Lua s ...

  9. 任务太多,时间太少,GT凶猛,不留情面啊。。。

    最近由于提高了发现资料的效率及方法,于是得到了很多好的资料,也打印了好多资料!可是,我突然发现自己好像要做的事太多了,一时间没有了头绪.今天花点时间写个博客,整理一下最近杂乱的状态,看看到底该如何调配 ...

  10. Python 手写数字识别-knn算法应用

    在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点 ...