一个经典的打飞机游戏(1)Pascal代码

十分经典,有一种街机的感觉

奇葩青年的又一控制台神作。

uses crt;

type list=record 
        ty,ax:integer; 
        end; 
     xy=record 
        bx,by:integer; 
        end; 
     l1=array[1..4,1..5]of char; 
     l2=array[1..5,1..6]of char; 
     l3=array[1..8,1..5]of char;

const 
     my:l1=(('0','0','A','0','0'), 
            ('A','0','H','0','A'), 
            ('b','H','H','H','d'), 
            ('0','T','U','T','0'));

pl:l3=(('0','H','0','H','0'), 
            ('p','H','I','H','q'), 
            ('0','H','X','H','0'), 
            ('0','V','0','V','0'), 
            ('0','H','H','H','0'), 
            ('0','H','O','H','0'), 
            ('0','H','H','H','0'), 
            ('0','0','V','0','0'));

boss:l2=(('0','T','H','H','T','0'), 
              ('X','H','I','I','H','X'), 
              ('X','H','X','X','H','X'), 
              ('H','0','H','H','0','H'), 
              ('V','0','V','V','0','V'));

var  ix,hp,bshp,box,i,j,k,t,sum,every:integer; 
     enlist:array[1..30]of list; 
     ch:char; 
     nowen:array[1..3]of list; 
     bom,boe:array[1..25]of xy;

procedure myij(x:integer); 
begin 
     for k:=1 to 4 do begin 
        if x>=2 then gotoxy(x-1,21+k) 
           else gotoxy(x,21+k); 
        write(' '); 
        for t:=1 to 5 do 
           if my[k,t]<>'0' then write(my[k,t]) else write(' '); 
        if x+4<80 then write(' '); 
        end; 
end;

procedure now(enemy:integer); 
begin 
     gotoxy(1,1); 
     delline; 
     gotoxy(1,1); 
     insline; 
     gotoxy(1,1); 
     textcolor(black); 
     write('    Hp:',hp,'    Remain enemy:',enemy,'    Boss Hp:',bshp); 
     textcolor(red); 
end;

function hiten(s:integer):integer; 
begin 
     hiten:=0; 
     for t:=1 to 3 do 
        if (bom[s].by<=6)and(bom[s].bx-nowen[t].ax>=0) 
           and(bom[s].bx-nowen[t].ax<=4)then hiten:=t; 
end;

function hitmy(s:integer):boolean; 
begin 
     hitmy:=false; 
     if (boe[s].by>=21)and(boe[s].bx-ix>=0) 
        and(boe[s].bx-ix<=4)then hitmy:=true; 
end;

function hitbo(s:integer):boolean; 
begin 
     hitbo:=false; 
     if (bom[s].by<=7)and(bom[s].bx-box>=0) 
        and(bom[s].bx-box<=5)then hitbo:=true; 
end;

procedure clear(s:integer); 
begin 
     for t:=1 to 4 do begin 
        gotoxy(nowen[s].ax,t+1); 
        write('     '); 
        end; 
end;

procedure win; 
begin 
     clrscr; 
     gotoxy(28,12); 
     writeln('Congratulations,You win!'); 
     write('                            Press Enter to exit...'); 
     readln; 
     halt; 
end;

procedure plij(s,x:integer); 
begin 
     for k:=1 to 4 do begin 
        if x>=2 then gotoxy(x-1,1+k) 
           else gotoxy(x,1+k); 
        write(' '); 
        for t:=1 to 5 do 
           if pl[s+k-1,t]<>'0' then write(pl[s+k-1,t]) else write(' '); 
        if x+4<80 then write(' '); 
        end; 
end;

procedure lost; 
begin 
     clrscr; 
     gotoxy(32,12); 
     writeln('Sorry,You lost!'); 
     write('                            Press Enter to exit...'); 
     readln; 
     halt; 
end;

function canmove(x:integer;y:integer):boolean; 
begin 
    canmove:=false; 
    if ((x>=2)and(y=1))or((x<=71)and(y=2)) then canmove:=true;

end;

function appear(x:integer):byte; 
var  f:boolean; 
begin 
     repeat 
        randomize; 
        t:=random(70)+2; 
        f:=true; 
        for k:=1 to 3 do 
           if (t-nowen[k].ax>=-5)and(t-nowen[k].ax<=5)then f:=false; 
        until f; 
     appear:=t; 
     if enlist[x].ty=1 then plij(1,t) 
        else plij(5,t); 
end;

function enis:integer; 
begin 
     t:=0; 
     for k:=1 to 3 do 
        if nowen[k].ty<>-1 then t:=t+1; 
     enis:=t; 
end;

function itmove(s,t:integer):boolean; 
begin 
     itmove:=true; 
     for k:=1 to 3 do if k<>s then 
        if ((t=0)and(nowen[s].ax-nowen[k].ax<7)) 
        or ((t=1)and(nowen[k].ax-nowen[s].ax<7)) then itmove:=false; 
end;

procedure move(s:integer); 
begin 
     randomize; 
     t:=random(100) mod 2; 
     if itmove(s,t) then 
        if t=0 then begin 
           if nowen[s].ty=0 then plij(1,nowen[s].ax-1) 
              else plij(5,nowen[s].ax-1); 
           nowen[s].ax:=nowen[s].ax-1; 
           end else if t=1 then begin 
              if nowen[s].ty=0 then plij(1,nowen[s].ax+1); 
              if nowen[s].ty=1 then plij(5,nowen[s].ax+1); 
              nowen[s].ax:=nowen[s].ax+1; 
              end; 
end;

procedure bb(s:integer); 
begin 
     if nowen[s].ty=0 then begin 
        for k:=1 to 25 do 
           if boe[k].bx=0 then begin 
              gotoxy(nowen[s].ax+1,6); 
              write('V'); 
              boe[k].bx:=nowen[s].ax+1; 
              boe[k].by:=6; 
              break; 
              end; 
        for k:=1 to 25 do 
           if boe[k].bx=0 then begin 
              gotoxy(nowen[s].ax+3,6); 
              write('V'); 
              boe[k].bx:=nowen[s].ax+3; 
              boe[k].by:=6; 
              break; 
              end; 
        end else begin 
           for k:=1 to 25 do 
              if boe[k].bx=0 then begin 
                 gotoxy(nowen[s].ax+2,6); 
                 write('V'); 
                 boe[k].bx:=nowen[s].ax+2; 
                 boe[k].by:=6; 
                 break; 
                 end; 
           end; 
end;

procedure main; 
begin 
     i:=1; 
     while 30-i+enis>=0 do begin 
        gotoxy(1,1); 
        ch:=' '; 
        if keypressed then ch:=readkey; 
        if hp<=0 then lost; 
        for j:=1 to 25 do 
           if bom[j].bx<>0 then 
            if (hiten(j)<>0)or(bom[j].by=2) then begin 
                 if hiten(j)<>0 then begin 
                    clear(hiten(j)); 
                    now(30-i+enis); 
                    nowen[hiten(j)].ty:=-1; 
                    nowen[hiten(j)].ax:=0; 
                    end; 
                 gotoxy(bom[j].bx,bom[j].by); 
                 write(' '); 
                 bom[j].bx:=0; 
                 bom[j].by:=0; 
                 myij(ix); 
                 end else begin 
                    gotoxy(bom[j].bx,bom[j].by); 
                    write(' '); 
                    bom[j].by:=bom[j].by-1; 
                    gotoxy(bom[j].bx,bom[j].by); 
                    write('A'); 
                    myij(ix); 
                    end;

if sum mod 2=0 then for k:=1 to 25 do 
           if boe[k].bx<>0 then 
              if hitmy(k)or(boe[k].by=25) then begin 
                 if hitmy(k) then hp:=hp-1; 
                 gotoxy(boe[k].bx,boe[k].by); 
                 write(' '); 
                 boe[k].bx:=0; 
                 boe[k].by:=0; 
                 myij(ix); 
                 now(30-i+enis); 
                 end else begin 
                    gotoxy(boe[k].bx,boe[k].by);

write(' '); 
                    boe[k].by:=boe[k].by+1; 
                    gotoxy(boe[k].bx,boe[k].by); 
                    write('V'); 
                    end; 
        case ch of 
           #27:halt; 
           'a':if canmove(ix-2,1)then begin 
              ix:=ix-1; 
              myij(ix); 
              end; 
           'd':if canmove(ix-2,2)then begin 
              ix:=ix+1; 
              myij(ix); 
              end; 
           'j':begin 
              for j:=1 to 25 do 
                 if bom[j].bx=0 then begin 
                    gotoxy(ix+2,21); 
                    write('A'); 
                    bom[j].bx:=ix+2; 
                    bom[j].by:=21; 
                    break; 
                    end; 
              end; 
           end; 
        delay(every); 
        sum:=sum+1; 
        if sum mod (every*(every div 3))=0 then for j:=1 to 3 do 
           if nowen[j].ty<>-1 then begin 
              bb(j); 
              move(j); 
              sum:=0; 
              end; 
        for j:=1 to 3 do 
           if (nowen[j].ty=-1)and(i<31) then begin 
              nowen[j].ty:=enlist[i].ty; 
              nowen[j].ax:=appear(j); 
              i:=i+1; 
              break; 
              end; 
        end;

win; 
end;

procedure welcome; 
begin 
     clrscr; 
     gotoxy(29,13); 
     write('Press Enter to start:'); 
     readln; 
     writeln('             use:  a-left  f-right  j-bomb'); 
     write('      Please input how fast(suggest 20):'); 
     readln(every); 
     textbackground(green); 
     clrscr; 
     gotoxy(29,13); 
     writeln('Now upbilnd enemy list...'); 
     for i:=1 to 30 do begin 
        randomize; 
        enlist[i].ty:=random(100) mod 2; 
        end; 
     for i:=1 to 3 do 
        with nowen[i] do begin 
           ty:=-1; 
           ax:=0; 
           end; 
     for i:=1 to 25 do 
        with bom[i] do begin 
           bx:=0; 
           by:=0; 
           end; 
     for i:=1 to 25 do 
        with boe[i] do begin 
           bx:=0; 
           by:=0; 
           end; 
     delay(500); 
     clrscr; 
     textcolor(red); 
     ix:=38; 
     hp:=20; 
     sum:=0; 
     bshp:=150; 
     myij(ix); 
     now(30); 
end;

begin 
     welcome; 
     main; 
end.

 

Pascal小游戏 打飞机的更多相关文章

  1. Pascal小游戏 不要消灭星星

    不要消灭星星 Pascal小游戏 Chaobs改编自pascal吧 控制台小游戏嘛,就当是练习一下结构化的写法. program wxtw; uses crt; type      zbdy=reco ...

  2. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  3. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

  4. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  5. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  6. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  7. Python小游戏之 - 飞机大战 !

    用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...

  8. Pascal小游戏 文件的产生

    一个整人的Pascal小程序 运行之后硬盘里面会有一大堆垃圾,当然更好的方法当然不是这样做! var a,b,c,d:char;beginfor a:='0' to '9' dofor b:='0' ...

  9. Pascal小游戏 双人射击

    一个双人的游戏 Pascal源码附上 只要俩人不脑残,一下午玩不完...又是控制台游戏中的一朵奇葩. Free Pascal 射击游戏 Program shooting_game; uses crt; ...

随机推荐

  1. ubuntu 显示隐藏文件

    原文链接 http://blog.csdn.net/happyjiahan/article/details/6023496 方法1.使用命令ls -a显示所有的文件,包括隐藏文件 方法2.在桌面化操作 ...

  2. April 17 2017 Week 16 Monday

    You will find that it is necessary to let things go; simply for the reason that they are heavy. 你会明白 ...

  3. kinectV2平面检测

    最近做一个关于kinect的东西,主要是在RGB图上提取指定的平面.对于kinect也是刚刚接触不是很熟悉,捣鼓了两天做了很粗糙的东西,但是也学到了一些东西,所以记录一下. 思路大概就是: 在RGB中 ...

  4. 【js基础修炼之路】— null和undefined的区别

    在近期的复习期间遇到null和nudefined,于是通过查找资料,想写一篇文章来说明他们的区别.. javaScript高级程序设计: 在使用var声明变量但未对其加以初始化时,这个变量的值就是un ...

  5. Excel公式巧用-将新值替换旧值,新值为空保留原值

    使用excel时候遇到 将新值替换旧值,新值为空保留原值的问题,简单使用Excel的函数即可以实现.

  6. Ubuntu中在QT中配置OpenGL

    之前搞实验室项目,博客有些天没有更新.现在学习需要,开始搞OpenGL+Ubuntu+QT. 搞了整整一天,由于是首次使用ubuntu,所以这ubuntu下配置qt和Opengl环境时走了很多的弯路, ...

  7. C# 驱动的mongodb的分页查询简单示例

    /// <summary> /// mongodb分页查询 /// </summary> /// <typeparam name="T">< ...

  8. 如果有反向代理的情况下,获取最原始的IP的办法

    HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_HOST"];

  9. LA 3902 网络

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  10. Poj(1125),Floyd,

    题目链接:http://poj.org/problem?id=1125 多源点最短路中的,最长路的,最短路. 看到这里就懵逼了,解释一下,找到一个源点,使得路最短,(遍历源点),路最短怎么求呢? 就是 ...