【plang 1.4.5】编写坦克(双人)游戏脚本

最近,想着做一款双人玩的坦克游戏脚本示例,顺便尝试在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 (可能无法访问)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChivenZhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值