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小游戏 打飞机的更多相关文章
- Pascal小游戏 不要消灭星星
不要消灭星星 Pascal小游戏 Chaobs改编自pascal吧 控制台小游戏嘛,就当是练习一下结构化的写法. program wxtw; uses crt; type zbdy=reco ...
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...
- 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)
微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)
微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- Python小游戏之 - 飞机大战美女 !
用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...
- Python小游戏之 - 飞机大战 !
用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...
- Pascal小游戏 文件的产生
一个整人的Pascal小程序 运行之后硬盘里面会有一大堆垃圾,当然更好的方法当然不是这样做! var a,b,c,d:char;beginfor a:='0' to '9' dofor b:='0' ...
- Pascal小游戏 双人射击
一个双人的游戏 Pascal源码附上 只要俩人不脑残,一下午玩不完...又是控制台游戏中的一朵奇葩. Free Pascal 射击游戏 Program shooting_game; uses crt; ...
随机推荐
- 寄生构造函数模式 js
有一点需要说明:首先返回的对象与构造函数或者构造函数的原型属性之间没有关系,也就是说构造函数返回的对象与在构造函数外部创建的对象没有什么不同,为此不能依赖 instanceof 操作符来确定对象类型. ...
- FYI-django数据库操作-外键
我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对多的类型. class Person(models.Model); name = models.CharField('作者姓名', ma ...
- 使用node.js + socket.io + redis实现基本的聊天室场景
在这篇文章Redis数据库及其基本操作中介绍了Redis及redis-cli的基本操作. 其中的publish-subscribe机制应用比较广泛, 那么接下来使用nodejs来实现该机制. 本文是对 ...
- 【转】Mac 程序员的十种武器
http://chijianqiang.baijia.baidu.com/article/3733 上 在写 Mac 程序员的十个武器之前,我决定先讲一个故事,关于 Mac 和爱情的.(你们不是问 M ...
- 自己写js库,怎么支持AMD
最近我打算把之前做项目写的一些工具集成到一个js库中,但是库既要在普通环境正常运行,又要在AMD环境下不暴露全局变量.一时间挺头疼的.随即我参考了一些现在流行的库的源码.学着写了一下,感觉还不错. 既 ...
- 旧文备份:VC中嵌入NASM编写的汇编函数
在公司开发的RT下没法使用C库,并且替代库函数没有几个,需要用到setjmp和longjmp函数,没办法,只能自己想办法了,上sourceforge淘换到一个小日本的工程,提供这两个函数的替代源码,名 ...
- 项目部署到自己的IIS上
一般我们只能在本机上才可以开到我们的项目,这个是不需要连网的 如果想让我们的项目在网站中打开,别人也可以看到,就需要把我们的项目部署到服务器上了,输入IP就可以看到我们的项目 发布项目 然后发布网站 ...
- mysql 自增主键为什么不是连续的?
由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑 MyISAM 引擎的自增值保存在数据文件中 nnoDB 引擎的自增值,其实是保存在了内存里,并且到了 MySQL 8.0 ...
- docker swarm使用keepalived+haproxy搭建基于percona-xtradb-cluster方案的高可用mysql集群
一.部署环境 序号 hostname ip 备注 1 manager107 10.0.3.107 centos7;3.10.0-957.1.3.el7.x86_64 2 worker68 10.0.3 ...
- MySQL自增锁等待问题解决
有网友再群里问:在做基准测试时候,批量插入数据时,有很多自增锁等待,我告诉他解决办法: 1.innodb_autoinc_lock_mode=2 2.innodb_autoextend_increme ...