双人对战小游戏

前言

这是一项基于processing实现的双人对战小游戏,参考了openprocessing中一款十分有趣的射击小游戏设计,操作方式则类似以前经常完的死神vs火影之类的pk游戏。效果如下:

功能

这个小游戏能实现双人之间的pk对战,玩家在游戏过程中扮演红蓝两方剑客,可以通过方向跳跃移动,强弱攻击击伤敌方,最后血条先归零的一方消散,另一方获取胜利。

示例过程

技术实现

系统构建

创建两个组(ActorGroup)类,用来装载两个玩家的类以及行动状态类,将两个组类放入游戏总状态类(GameSystemState)中,通过run函数推动系统运行。

void run() {if (currentKeyInput.isRestart) {system = new GameSystem();  return;}pushMatrix();currentState.run(this);popMatrix();if (showsInstructionWindow) displayRule();displayLife();}

粒子系统

创建粒子类和粒子定义类来自定义想要创建的粒子类型,通过粒子添加函数添加在所需位置

  void addSquareParticles(float x, float y, int particleCount, float particleSize, float minSpeed, float maxSpeed, float lifespanSecondValue) {final ParticleBuilder builder = system.commonParticleSet.builder.type(1)  // Square  .position(x, y).particleSize(particleSize).particleColor(color(0.0)).lifespanSecond(lifespanSecondValue);for (int i = 0; i < particleCount; i++) {final Particle newParticle = builder.polarVelocity(random(TWO_PI), random(minSpeed, maxSpeed)).build();system.commonParticleSet.particleList.add(newParticle);}}

技能释放

当按键交互返回真值时,映射成对应数值作为技能以及其它行为的参数启动,不同的技能对应不同类,并将创建的技能添加到集合中进行之后的检测和删除。

  void act(PlayerActor parentActor) {final AbstractInputDevice input = parentActor.engine.controllingInputDevice;if (parentActor.yPosition>360) {parentActor.addVelocity(0, 5.0 * input.verticalMoveButton);} else {if (parentActor.xPosition>150&&parentActor.xPosition<INTERNAL_CANVAS_SIDE_LENGTHX-150) {if (parentActor.xPosition>250&&parentActor.xPosition<INTERNAL_CANVAS_SIDE_LENGTHX-250) parentActor.addVelocity(0, 5.0 * input.verticalMoveButton);if (parentActor.yPosition>200) parentActor.addVelocity(0, 5.0 * input.verticalMoveButton);}}parentActor.addVelocity(1.0 * input.horizontalMoveButton, 0);parentActor.yVelocity+=1;if (input.shotButtonPressed) {parentActor.state = drawShortbowState.entryState(parentActor);parentActor.aimAngle = getEnemyPlayerActorAngle(parentActor);return;}if (input.longShotButtonPressed) {parentActor.state = drawLongbowState.entryState(parentActor);parentActor.aimAngle = getEnemyPlayerActorAngle(parentActor);return;}if (input.defendButtonPressed) {parentActor.def=true;pushStyle();fill(parentActor.fillColor, 40);noStroke();ellipse(parentActor.xPosition, parentActor.yPosition, 120, 120);popStyle();return;}else{parentActor.def=false;}
}

碰撞检测

技能释放时将技能存储在技能类的集合之中,之后对技能和玩家进行相应碰撞检验,根据结果判定伤害与死亡。

void checkCollision() {final ActorGroup myGroup = system.myGroup;final ActorGroup otherGroup = system.otherGroup;for (AbstractArrowActor eachMyArrow : myGroup.arrowList) {for (AbstractArrowActor eachEnemyArrow : otherGroup.arrowList) {if (eachMyArrow.isCollided(eachEnemyArrow) == false) continue;breakArrow(eachMyArrow, myGroup);breakArrow(eachEnemyArrow, otherGroup);}}if (otherGroup.player.isNull() == false) {for (AbstractArrowActor eachMyArrow : myGroup.arrowList) {AbstractPlayerActor enemyPlayer = otherGroup.player;if (eachMyArrow.isCollided(enemyPlayer) == false) continue;if (eachMyArrow.isLethal()) { if (otherGroup.player.def==true)otherGroup.hp-=35;else otherGroup.hp-=70;if (otherGroup.hp<=0)killPlayer(otherGroup.player);} else { if (otherGroup.player.def==true) {} else {otherGroup.hp-=10;if (otherGroup.hp<=0) killPlayer(otherGroup.player);else {thrustPlayerActor(eachMyArrow, (PlayerActor)otherGroup.player);}}}breakArrow(eachMyArrow, myGroup);}}if (myGroup.player.isNull() == false) {for ( AbstractArrowActor eachEnemyArrow : otherGroup.arrowList) {if (eachEnemyArrow.isCollided(myGroup.player) == false) continue;if (eachEnemyArrow.isLethal()) {if (myGroup.player.def==true) myGroup.hp-=35;else myGroup.hp-=70;if (myGroup.hp<=0) killPlayer(myGroup.player);} else {if (myGroup.player.def==true) {} else {myGroup.hp-=10;if (myGroup.hp<=0) killPlayer(myGroup.player);else {thrustPlayerActor(eachEnemyArrow, (PlayerActor)myGroup.player);}}}breakArrow(eachEnemyArrow, otherGroup);}}}

参考

代码本色 - Daniel Shiffman
https://processing.org/reference/
https://www.openprocessing.org/

processing交互应用——双人对战游戏相关推荐

  1. 【Python游戏】可以实现双人对战游戏,类似拳皇可以选英雄的 绝对好玩 | 附带源码

    前言 本游戏的类型有点像大家小时候玩过的拳皇,可以进行游戏人物的选择,相信我绝对好玩!!! 废话不多说吧,大家记得给小编点个赞哈,一键三连才是小编更新的动力!! 相关文件 想学Python的小伙伴可以 ...

  2. Java swing双人对战游戏

    Java 模拟游戏开发 一.设计思路 游戏界面介绍 首先,我对每个角色的攻击和生命值都进行了描述,方便用户进行角色 的选择.其次,在完成老师布置要求的同时,我增加了技能这一个选项,每个角色都有相对应的 ...

  3. java双人对战游戏源代码_双人对战java贪吃蛇

    [实例简介] 代码有详细的注释,只有游戏部分,没有积分的部分,中间的障碍是Love,双方分别从上下两头开始,在里面进行PK,写着练习的,仅供参考,嘿嘿.操作方法在文件里的 txt文档里 [实例截图] ...

  4. harry -双人对战游戏

    import randomimport pygame# 初始化 pygame.init() # 设置窗口大小 screen_width = 1000 screen = pygame.display.s ...

  5. C语言实现三子棋plus版本(困难人机电脑不会输,支持双人对战)

    目录 一.功能描述 二.游戏部分功能介绍 三.代码实现 1. main()代码 2.游戏菜单代码 3.playgame()代码 3.模式菜单和难度菜单 4.初始化棋盘 5.打印棋盘 6.玩家下棋 7. ...

  6. c语言联机游戏,C/C++ 游戏 贪吃蛇双人对战版

    贪吃蛇双人对战版--C语言 最近写的,用于交最后一次结构化程序设计课的作业,闲暇之余传到网上,仅供参考,新手上路,请多指教. 话不多说,先附上下载链接.http://download.csdn.net ...

  7. 51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)

    本博客51单片机实训系列,旨在记录本人在大学上单片机技术这门课时所做的课程实训内容,并与大家分享基于51单片的课程作业,如果作业中的某些细节和代码能给大家一点启发那就更好了,希望大家能用51单片机做出 ...

  8. JAVA单机五子棋小游戏(双人对战版)

    此代码为简单双人对战五子棋程序,不涉及算法游戏策略. 具有轮流出手,判断输赢,判断输入是否合法功能. 运行效果如图: import java.io.*; public class Gobang {// ...

  9. 用javascript+jquery编写的小游戏-贪吃蛇(双人对战版)

    前言 这是我在多年前初学jquery, 并结合javascript, 编写的一个小游戏.那洋洋洒洒几千行的js代码时刻提醒着我"不忘初心!". 效果演示 代码 引入文件 由于用到了 ...

  10. 使用C++完成一个小型双人对战回合制游戏

    #include<iostream> using namespace std; class hero {public:hero();//基础属性hero(int w = 80, int f ...

最新文章

  1. Linux无盘工作站架设实例
  2. 网站内链为什么要做上下文链接?对网站优化有什么帮助?
  3. shell tr 替换 空格_shell tr命令
  4. 人工智能数学基础知识
  5. spring roo_使用Spring Roo进行概念验证
  6. Mybatis(14)多表查询
  7. 图灵聊天机器人小程序
  8. 小米路由器青春版刷潘多拉、华硕固件
  9. 【CTF】明御攻防实验室misc ningen
  10. 机器学习基石和机器学习技法_机器学习和洞穴寓言寓言
  11. Craps赌博游戏-python3
  12. presto字符串转日期
  13. 1.12 Windows程序的生与死 <深入浅出MFC读书笔记>
  14. ajax.googleapis firefox,使用Redirector插件解决googleapis公共库加载的问题【转】
  15. 奶茶店一天盈利有多少?广州哪里有专业奶茶培训点
  16. 蓝牙手柄UKCA认证
  17. 流量分析——安恒八月月赛CTF
  18. 【操作系统】操作系统的功能管理与分类
  19. iRegNet3D:疾病相关SNP位点在三维调控网络中的作用
  20. md文件 linux,MD 文件扩展名: 它是什么以及如何打开它?

热门文章

  1. 蓝牙传输速率详细分析【针对蓝牙4.2]
  2. [交换最小值和最大值] 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。
  3. 网站在线客服系统源码|在线客服代码下载 (2021最新版)
  4. 如何在Mac OS X上创建一个Service服务进程
  5. android webview 手机兼容问题
  6. 汇编实验二——选出非负数以及排序
  7. 存储过程(无参,IN多个输入参数,OUT多个输出参数,INOUT输入输出)
  8. Java 动态眨眼 EyesJPanel (整理)
  9. Qt:QPushButton 单击、双击响应区分
  10. 差模信号与共模信号的理解