感谢上外静中任淳同学提供
 
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. iOS开发Swift篇—(八)函数(2)

    iOS开发Swift篇—(八)函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 func sum(num1: Int ...

  2. PHP数据库登陆注册简单做法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. nodejs gulp less编辑

    nodejs 下载地址:http://pan.baidu.com/s/1bnz2oPp 提取密码:0mip 1.最简单的编译less 在安装好nodejs后,cmd 进入控制台 安装 lessc : ...

  4. DownloadManager补漏

    原始完成于:2014-10-24 20:01:03 DownloadManager是一个处理HTTP下载请求的系统服务: 1. 基本用法 1 private void download() { 2 R ...

  5. select document library from certain list 分类: Sharepoint 2015-07-05 07:52 6人阅读 评论(0) 收藏

    S using System; using Microsoft.SharePoint; namespace Test { class ConsoleApp { static void Main(str ...

  6. loadrunner的基本操作

    一.遗留问题: 1.controller中,到设置的时间后,仍然在运行: 2.如何对多个用例的结果进行分析,找到系统可以承受的最佳的用户数量点: 3.vuser与实际的用户访问数量是一回事吗?比如vu ...

  7. 安装生物信息学软件-MetaPhlAn2

    上周20161021-20161028的任务还没有搞完,所以今天来填坑(微笑脸) ××××××××××××××××××××我是萌萌哒分割线××××××××××××××××××××××××××××××× ...

  8. 2015-微软预科生计划-面试题-Swimming Plans

    http://hihocoder.com/problemset/problem/1188 题目大意 Steven在时刻T到达了室内游泳池. 游泳池一共有N条泳道,游泳池两侧分别标记为0和1. 已知除了 ...

  9. WPF学习笔记——认识XAML

    Extensible Application Markup Language,XAML是一种声明性标记语言. 一.XAML语法概述 1,与XML类似,用尖括号标记元素 <StackPanel&g ...

  10. readfile() 函数

    定义和用法 readfile() 函数输出一个文件. 该函数读入一个文件并写入到输出缓冲. 若成功,则返回从文件中读入的字节数.若失败,则返回 false.您可以通过 @readfile() 形式调用 ...