一个经典的打飞机游戏(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. 【JavaScript 封装库】BETA 3.0 测试版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  2. 吴裕雄 python 机器学习——支持向量机非线性回归SVR模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  3. centos 开启http代理tinyproxy

    一.前言 就算有一些公司想到要进行压力测试也是用一些微软,官网出的一些软件,一个ip发起很多访问.等有一天黑客攻击来了发现还是顶不住.华盟君认为知此知彼才是压力测试的关键点,应当模拟黑客手法进行压力测 ...

  4. 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  5. ADO.NET之一:连接层

    ADO.NET大部分由System.Data.dll核心程序集来表示. ADO.NET类库有三种完全不听的方式来实现数据访问:连接式.断开式和通过Entity框架.连接式就是会一直占用网络资源,断开式 ...

  6. this指向问题(2)

    4.显示绑定 指的是apply.bind.call (1).apply 和 call 相同点: <1> 这两个方法的用途是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的 ...

  7. 永久免费开源的卫星地形图地图下载工具更新Somap2.13版本功能更新 更新时间2019年2月22日13:59:05

    一.下载地址 最新版本下载地址:SoMap2.13点击此处下载  二.系统自主开发特色功能展示 1.上百种地图随意下载 高德.百度.arcgis.谷歌.bing.海图.腾讯.Openstreet.天地 ...

  8. 通过ip地址访问同一局域网下已经启动的angular项目

    通常tomcat启动的项目同一局域网下我们都可以访问.angular启动的前台项目别人怎么访问,一直不懂,后来知道启动命令加个参数就行了 首先查看本机ip 第二步,启动命令里加上--host 本机ip ...

  9. Linux问题分析或解决_ssh无法连接

    1. ldd - 检查依赖库是否存在问题 问题:ssh连接不上,之前一直没有问题,最近别人安装了其他桌面(系统Ubuntu) 解决: 查看进程,发现没有启动 ps -ef | grep ssh 重新安 ...

  10. 【shopex】真正可用的app开发机制

    shopex的app开发机制详解   网上流传的shopex4.8.5的app开发教程,不仅说得不明不白,而且由于版本问题,照着做根本是做不成的. 知其然,亦要知其所以然. shopex提供了的一个干 ...