当前位置:网站首页>【plang 1.4.5】编写坦克(双人)游戏脚本
【plang 1.4.5】编写坦克(双人)游戏脚本
2022-08-02 03:29:00 【ChivenZhang】
最近,想着做一款双人玩的坦克游戏脚本示例,顺便尝试在plang编程语言上测出一波BUG,结果让人失望,程序正常运行。测试代码如下。
工程目录
Main.ps:程序执行入口
import std::IO;
import std::Type;
import std::OS;
import tank::TankClient;
class Main
{
public static main()
{
OS.system("cls");
client->Client = new TankClient();
client.onInit();
while(true)
{
OS.system("cls");
client.onUpdate();
co_yield null;
}
client.onUninit();
IO.printf("game over!");
}
}
TankClient.ps:坦克游戏场景
package tank;
import std::IO;
import std::Type;
import std::OS;
import std::IOEXT;
public class TankClient : Client
{
public TankClient(){}
public onInit()
{
tank1 = new Tank(0,0);
tank2 = new Tank(40,8);
}
public onUninit(){}
public onUpdate()
{
if(tank1 == null || tank2 == null) return;
// listen tank1's keyboard
{
a->int = IOEXT.key('A');
d->int = IOEXT.key('D');
w->int = IOEXT.key('W');
s->int = IOEXT.key('S');
f->int = IOEXT.key('E');
if(a!=0) tank1.move(-1,0);
if(d!=0) tank1.move(1,0);
if(w!=0) tank1.move(0,-1);
if(s!=0) tank1.move(0,1);
if(f!=0) tank1.shoot(tank2.getx(),tank2.gety());
tank1.update();
}
// listen tank2's keyboard
{
a->int = IOEXT.key('J');
d->int = IOEXT.key('L');
w->int = IOEXT.key('I');
s->int = IOEXT.key('K');
f->int = IOEXT.key('U');
if(a!=0) tank2.move(-1,0);
if(d!=0) tank2.move(1,0);
if(w!=0) tank2.move(0,-1);
if(s!=0) tank2.move(0,1);
if(f!=0) tank2.shoot(tank1.getx(),tank1.gety());
tank2.update();
}
// calculate tanks' life here
// but do nothing right now
}
tank1->Tank;
tank2->Tank;
}
Tank.ps:坦克模拟
package tank;
import gui::GUI;
public class Tank
{
public Tank()
{
bullet = new Bullet();
}
public Tank(x->int, y->int)
{
this.x = x;
this.y = y;
bullet = new Bullet(x, y);
}
public update()
{
GUI.getInstance().draw(x, y, '#');
if(bullet != null) bullet.update();
}
public move(offx->int, offy->int)
{
x += offx;
y += offy;
if(x<0 || x>50) x -= offx;
if(y<0 || y>10) y -= offy;
}
public shoot(x->int, y->int)
{
if(bullet != null) bullet.move(this.x, this.y, x, y);
}
public getx()->int{return x;}
public gety()->int{return y;}
x->int = 0;
y->int = 0;
bullet->Bullet;
}
Bullet.ps:弹药模拟
package tank;
import gui::GUI;
public class Bullet
{
public Bullet(){}
public Bullet(x->int, y->int)
{
this.x = this.cx = x;
this.y = this.cy = y;
}
public update()
{
if(cx<x)++cx;
else if(cx>x)--cx;
else;
if(cy<y)++cy;
else if(cy>y)--cy;
else;
if(cx==x && cy == y);
else GUI.getInstance().draw(cx, cy, '*');
}
public move(cx->int, cy->int, x->int, y->int)
{
if(x<0 || x>50);
else this.x = x;
if(y<0 || y>10);
else this.y = y;
if(cx<0 || cx>50);
else this.cx = cx;
if(cy<0 || cy>10);
else this.cy = cy;
}
x->int = 0;
y->int = 0;
cx->int = 0;
cy->int = 0;
}
运行截图(点击E键,上方坦克向下方发射弹药)
代码仓库链接
Gitee:plang-demo
GitHub:plang-demo (可能无法访问)
边栏推荐
猜你喜欢
随机推荐
[Spark]-协同过滤
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
ICN6211:MIPI DSI转RGB视频转换芯片方案介绍 看完涨知识了呢
How to quickly build your own IoT platform?
聊一聊数据库的行存与列存
目标检测(一):R-CNN系列
Case | industrial iot solutions, steel mills high-performance security for wisdom
I2C无法访问ATEC508A加密芯片问题
NE5532运放加法器
TC358860XBG BGA65 东芝桥接芯片 HDMI转MIPI
Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset I3D论文精读
GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片
Cadence allegro导出Gerber文件(制板文件)图文操作
PCIE电路设计
01背包问题(动态规划)
兼容C51与STM32的Keil5安装方法
【TCS3200 颜色传感器与 Arduino 实现颜色识别】
【nRF24L01 与 Arduino 连接实现无线通信】
[Popular Science Post] I2C Communication Protocol Detailed Explanation - Partial Software Analysis and Logic Analyzer Example Analysis
火焰传感器与 Arduino 连接