Pascal小游戏 打飞机

一个经典的打飞机游戏(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小游戏 打飞机

时间: 2024-10-09 02:36:26

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

第四十一天 一乐在其中—Android的小游戏打飞机(五)添加背景

8月10日,晴."寒蝉凄切,对长亭晚,骤雨初歇." 上篇已经加载了敌机,本篇主要添加背景画面. 本篇要用到的几个函数讲解: 1.addChild(CCNode child, int z):两个参数,第一个要加入场景的对象,第二个是绘制层的顺序,默认参数值为0,表示最高优先层导入,该值越大表示该层在最后加载(在最高一层),一般背景图层是首先加载,其它元素在加载在背景层上面.因为背景在后面加载的话,会覆盖掉前面加载的元素,看不到想要的图层组合效果. 2.schedule(String se

Pascal小游戏 双人射击

一个双人的游戏 Pascal源码附上 只要俩人不脑残,一下午玩不完...又是控制台游戏中的一朵奇葩. Free Pascal 射击游戏 Program shooting_game; uses crt; const cz:array[1..4,1..2] of -1..1=((0,1),(1,0),(0,-1),(-1,0)); var i,j,xz1,yz1,y1,xz2,yz2,y2,t1,t2,t3,k,v1,v2:integer;     ch:char;     a:array[1..2

Pascal小游戏 贪吃蛇

一段未完成的Pascal贪吃蛇 说这段代码未完成其实是没有源代码格式化,FP中一行最多只有255字符宽. uses crt; const screenwidth=50; screenheight=24; wallchar='#'; snakechar='*'; ; type point=record x,y:integer; end; var snake:array [0..500] of point; map:array [0..screenwidth,0..screenheight] of

Pascal小游戏 文件的产生

一个整人的Pascal小程序 运行之后硬盘里面会有一大堆垃圾,当然更好的方法当然不是这样做! var a,b,c,d:char;beginfor a:='0' to '9' dofor b:='0' to '9' dofor c:='0' to '9' dofor d:='0' to '9' dobeginassign(output,'C:\'+a+b+c+d+'.txt');rewrite(output);write(1);close(output);assign(output,'D:\'+a

Pascal小游戏 俄罗斯方块怀旧版

俄罗斯方块怀旧版(注释版) {$APPTYPE GUI}{$MODE DELPHI}program WinPiece; usesWindows; constAppName = 'WinPiece';pm = 25; vardc : hdc;AMessage : Msg;hWindow: HWnd;hPen ,hBrush : longword;intNextPiece, intCurPiece,intTempPiece : longint;BigMap : array [0..11,-4..20

第四十天 一乐在其中—Android的小游戏打飞机(三)添加敌机

8月9日,晴."江城如画里,山晓望晴空.雨水夹明镜,双桥落彩虹. 人烟寒橘柚,秋色老梧桐." 上篇已经让飞机加载子弹和音效及背景音乐,本篇主要添加敌机. 本篇要用到的几个函数讲解: 1.voidsetTag (int nTag) 设置动作的标记. 2.CCRANDOM_0_1()函数生成的是 [0, 1] 之间的随机数:要生成  [0-100] 之间的数CCRANDOM_0_1 * 100:生成 [1,5]  之间的float 数,就是 CCRANDOM_0_1 * 4 + 1. 3.

第三十七天 一乐在其中—Android的小游戏打飞机(一)

8月3日,晴天."绿树阴浓夏日长,楼台倒影入池塘, 水晶帘动微风起,满架蔷薇一院香." cocos2d是一个开源的游戏开发框架,利用它可以非常容易的开发2D游戏.目前最主要的分支是iPhone版本的,你可以在iPhone上开发2D游戏.它提供了物理,精灵(sprites),视差卷轴(parallax scrolling),支持iPhone touch和accelerator等很多功能.现在在App Store上已经有不少用cocos2d开发的游戏. 如果你想在Andriod上使用Jav

第三十八天 一乐在其中—Android的小游戏打飞机(二)移动飞机

8月6日,阴."桑条无叶土生烟,箫管迎龙水庙前.朱门几处看歌舞,犹恐春阴咽管弦". 上篇已经把飞机放到了屏幕上,怎么让飞机随手指自由移动,是本篇解决的问题. 本篇要用到的几个函数讲解: 一.cocos2d的触摸事件如下: 1.ccTouchesMoved:接受的是手指在屏幕上滑动/停留的信息,即当用户手指在屏幕移动时,执行该方法. 2.ccTouchesBegan:接受的是手指点击屏幕的那一下的信息,即当用户开始触摸屏幕时,执行该方法. 3.ccTouchesEnded: 接受手指离开

第三十九天 一乐在其中—Android的小游戏打飞机(三)飞机打子弹

8月7日,小雨."乳鸦啼散玉屏空,一枕新凉一扇风.睡起秋色无觅处,满阶梧桐月明中." 上篇已经让飞机随手指自由移动,本篇加载子弹和音效及背景音乐. 本篇要用到的几个函数讲解: 一.cocos2d的音效.背景音乐函数如下: 1.SoundEngine.sharedEngine().playSound(Context ctxt, int resId, boolean loop) 用于播放背景音乐. 2.SoundEngine.sharedEngine().playEffect(Contex