感谢上外静中任淳同学提供
 
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. linux下各种软件的安装过程

    //////知识储备//////////////////////////////////////////////////////////////////// /var 下存放着服务和经常改变的文件 / ...

  2. 作业七:团队项目——Alpha版本冲刺阶段 001

    今天进展:准备开发环境,安装软件. 今天安排:因为软件过于庞大,所以我们第一天都在按软件,原本计划第一天要设计框架,但因为软件问题.所以我们决定留到第二天.

  3. 3、android notification 详细用法

    在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以确认保存成功. * 如果应用程序在后台 ...

  4. java.lang.ClassNotFoundException: com.*.listener.ConfigInfoReader

    包的问题,删除掉了buildPath的包,再加上一个需要用的,问题搞定...不知道是为什么

  5. android:LayoutInflater

    LayoutInflater:一般用于查找res/layout下的布局文件,findViewById()一般是用于查找布局下的各种控件 一般:我们使用LayoutInflater.from(conte ...

  6. poj1502 spfa最短路

    //Accepted 320 KB 16 ms //有n个顶点,边权用A表示 //给出下三角矩阵,求从一号顶点出发到各点的最短路的最大值 #include <cstdio> #includ ...

  7. springmvc学习第二天

    一.pojo Spring mvc 会按请求参数名和pojo属性名进行自动匹配,自动为该对象填充属性值,并且支持级联属性 表单: <form action="springmvc/tes ...

  8. jQuery 中 offset()方法与用position()的区别

    jq中offset().left和offset().top获取的是相对于整个文档左上角的偏移. 而用$(selector).position().left和.top 取到的则是相对于selector父 ...

  9. hiho一下121周 后缀数组二·重复旋律2

    后缀数组二·重复旋律2 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...

  10. UVA-11107 Life Forms(后缀数组)

    题目大意:给出n个字符串,找出所有最长的在超过一半的字符串中出现的子串. 题目分析:将所有的字符串连成一个,二分枚举长度,每次用O(n)的时间复杂度判断.连接字符串的时候中间添一个没有出现过的字符. ...