当前位置:网站首页>【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 (可能无法访问)
边栏推荐
猜你喜欢
NE5532运放加法器
【土壤湿度传感器与 Arduino 测量土壤湿度】
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
USB HUB USB集线器电路设计
与TI的lvds芯片兼容-GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片,
分布式消息队列平滑迁移技术实战
火焰传感器与 Arduino 连接
【Arduino connects DHT11 humidity and temperature sensor】
R语言 —— 多元线性回归
【水位传感器与 Arduino 连接测量水位】
随机推荐
树莓派4B打开文件管理时出现闪退
Cadence allegro导出Gerber文件(制板文件)图文操作
USB_ID介绍
机器学习预备知识
【科普贴】SPI接口详解
Arduino lights up nixie tubes
【科普贴】SD卡接口协议详解
【NTC 热敏电阻与 Arduino 读取温度】
网站开发方案研究
聊一聊数据库的行存与列存
《scala 编程(第3版)》学习笔记4
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
PCB设计思路
LT8918L LVDS转MIPI芯片技术支持资料
《scala 编程(第3版)》学习笔记2
Spark特征工程-one-hot 和 multi-hot
MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
Personal image bed construction based on Alibaba Cloud OSS+PicGo
I2C无法访问ATEC508A加密芯片问题
[Arduino connects the clock module to display the time on LCD1602]