一个经典的打飞机游戏(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. c++ priority_queue

    1.默认为大顶堆 #include <iostream> #include <queue> using namespace std; int main() { priority ...

  2. java运行顺序-JVM之九

    简化顺序版本是: 父类的静态成员赋值和静态块,代码排版先后顺序执行,只运行一次 子类的静态成员赋值和静态块,代码排版先后顺序执行,只运行一次 父类代码块 父类构造方法 子类初始化块 子类构造方法 再次 ...

  3. bzoj4943 [Noi2017]蚯蚓排队

    题面:http://www.lydsy.com/JudgeOnline/upload/Noi2017D1.pdf 正解:字符串$hash$. 我在考场上写了个$map$的$hash$被卡成$40$分, ...

  4. 前端高质量知识(二)-JS执行上下文(执行环境)详细图解Script

    先随便放张图 我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题.比如先来一个简单一点的. console.log(a); // 这里会打印出什么? var a = 20; PS: 变量提 ...

  5. Android 编辑框(EditText)属性学习

    EditText的属性很多,这里介绍几个:android:hint="请输入数字!"//设置显示在空间上的提示信息android:numeric="integer&quo ...

  6. 深搜,四色定理,(POJ1129)

    题目链接:http://poj.org/problem?id=1129 解题报告: #include<iostream> #include<cstdio> #include&l ...

  7. 重定向跳出父Frame

    当session过期后可以用过滤器来设置重定向页面 代码如下: public class ActionFilter extends HttpServlet implements Filter {pri ...

  8. js字符串内容包含单引号‘’和双引号“”怎么办?

    如果javascript中的字符串包含单引号和双引号,可以用转义字符来标识 'I\'m \"OK\"!'; 表示的字符串内容是:I'm "OK"! 转义字符\可 ...

  9. vue-wechat-title

    html中的title安装:npm install vue-wechat-title --save1.在mian.js中//网页titleimport VueTitle from 'vue-wecha ...

  10. java自定义泛型 面试题:接收任意数组进行反转 泛型通配符

    不用泛型只能操作某种类型进行反转 代码如下: package com.swift.fanxing; import org.junit.Test; public class RenyiReverse { ...