如何用java编写一个简单的多人PK游戏
如何用java编写一个简单的多人PK游戏
- 类与对象---PK游戏的编写
- 素材取用----王者荣耀和BILIBILI
- 创建两个对战的角色(PK游戏最少需要两名角色)
- 创建孙尚香和Van
- 设置孙尚香和Van的属性
- 设置孙尚香和Van的技能
- -设计技能的流程
- 设置孙尚香和Van的技能
- 如何确定他们技能的使用对象----使用方法:参数
- 开始设置他们的PK程序
- 设置选择英雄
- 买装备
- 使用技能
- 对战过程的设计
- 判断胜负
- 加入的第三个角色与胜利者PK
- 创建新角色类
- 选出胜利者
- 让胜利者与加入的第三个角色PK
- 判断最终游戏的胜负
- 我的问题:如何简化技能的设置以致我们可以在对战对象较多时不用重复设置方法就能应对所有对象?
类与对象—PK游戏的编写
素材取用----王者荣耀和BILIBILI
创建两个对战的角色(PK游戏最少需要两名角色)
创建孙尚香和Van
- 创建Van和孙尚香的类文件
public class Van//或者SunShangxiang
{}
设置孙尚香和Van的属性
设置属性:变量和常量格式:属性属于的类型 属性名字变量:String classID/int ad常量:final int classID=0.01//final为最终变量
//以此设置孙尚香和Van的名字、攻击力…各种对战时所需要的属性
//设置Van(孙尚香)角色的属性String nameID;int ad;int ap;int hp;int lv;
设置孙尚香和Van的技能
-设计技能的流程
- 将其放入类方法里来实现
格式:返回值类型 方法名 (参数类型 参数名){//方法名}void 技能名(攻击对象类 攻击对象的名){}
- 选定技能使用对象
public void ack_3(Van van){}//其中van就是技能作用的对象,它是以对象的形式作为方法的参数
- 将其技能伤害值赋予一个num(由于伤害值可能是浮点数所以这里需要将其强制转化为整数)
int num=(int)(500+0.75*ad+125*lv)
- 用hp(血量)减少来表示技能造成的伤害效果
van.hp -=num;
- 输出技能使用结果
System.out.print(nameID+"使用技能攻了"+van.nameID);
System.out.println(van.nameID+"减少了"+num+"血量,还剩hp"+van.hp);
设置孙尚香和Van的技能
- 孙尚香类的技能:对于目标范围内的敌人造成500/625/750(+75%物理加成)点物理伤害
//设置孙尚香的技能public void ack_3(Van van) {//孙尚香类的技能 :对于目标范围内的敌人造成500/625/750(+75%魔法加成)点魔法伤害int num=(int)(500+0.75*ad+125*lv);//将结果强制转为整数型--小数点后全部直接省略//计算一次技能攻击之后的血量van.hp -=num;//输出攻击结果System.out.print(nameID+"使用技能攻击了"+van.nameID);System.out.println(van.nameID+"减少了"+num+"血量,还剩hp"+van.hp);}
- Van类的技能:对范围内的敌人造成700/1000/1300(+90%物理加成)点物理伤害
//设置Van的技能public void ack_3(SunShangxiang ssx) {//Van类的技能 :对范围内的敌人造成700/1000/1300(+90%物理加成)点物理伤害int num=(int)(700+0.9*ad+300*lv);//将结果强制转为整数型--小数点后全部直接省略//计算一次技能攻击之后的血量ssx.hp -=num;//输出攻击结果System.out.print(nameID+"使用技能攻击了"+ssx.nameID);System.out.println(ssx.nameID+"减少了"+num+"血量,还剩hp"+ssx.hp);}
如何确定他们技能的使用对象----使用方法:参数
- 参数:参数类型 参数名;- 参数名:在方法中参数名是在方法被调用的时候传入的一个参数它可以是一个数值也可以是一个对象,而在这个方法中我们以对象van和ssx作为参数名在调用技能的时候我们就将van和ssx的数据传入这个方法中
开始设置他们的PK程序
一个主函数就是一个程序–简单的PK程序也是如此
设置选择英雄
也就是创建使用的英雄这个对象
- 创建对象关键字:new格式:类名 对象名=关键字 类名- 创建ssx和van对象
//首先创建双方的对象SunShangxiang ssx=new SunShangxiang();Van van=new Van();
买装备
也就是给我们创建角色各种属性来赋值
- 赋值格式:
hy.属性名字=赋值;–属性的赋值
- 给van和ssx赋值
//给两个对象属性赋值ssx.nameID="孙尚香";ssx.hp=10000;ssx.ad=100;ssx.ap=359;ssx.lv=18;van.nameID="佟大为";van.hp=9854;van.ad=342;van.ap=108;van.lv=10;
使用技能
也就是在程序里面使用创建对象的方法
- 方法使用格式:hy.方法名();--方法的引用- ssx和van的技能的使用ssx.ack_3(van);van.ack_3(ssx);
对战过程的设计
在对战过程中我们需要多次互相的技能使用才能决一胜负,所以我们设计一个循环结构使他们循环PK
- 设计van和ssx的循环PK结构
//用while创建循环对战过程while(ssx.hp>0&&van.hp>0) {ssx.ack_3(van);van.ack_3(ssx);}
但是这样当一个人血量先小于零
时还会再次攻击这会导致双方血量都小于零不好判断最终对战结果
所以我们设计一个if判断语句使血量小于零的对象不可以再次攻击
- 添加一个if结构
//用while创建循环对战过程while(ssx.hp>0&&van.hp>0) {ssx.ack_3(van);//为了保证孙尚香每次攻击之前血量都大于0if(van.hp>0) {van.ack_3(ssx);}}
判断胜负
在PK游戏中谁的血量小于零谁就输了,所以我们使用一个if结构来判断谁输谁赢
- 判断胜负程序
//判断哪一方胜利if(ssx.hp>0) {System.out.print(ssx.nameID+"更勇!!");}else{System.out.print(van.nameID+"更勇!!");}
加入的第三个角色与胜利者PK
由于需要第三个角色,所以我们需要先创建一个新的角色类
创建新角色类
- 和上面创建角色类一样的方法-设置属性:变量和常量格式:属性属于的类型 属性名字变量:String classID/int ad常量:final int classID=0.01//final为最终变量-技能格式:返回值类型 方法名 (参数类型 参数名){//方法名}void 技能名(攻击对象类 攻击对象的名){}
创建先辈类
//设置属性String nameID;int ad;int hp;int lv;
//设计技能public void chouqidan() {//田所浩二类的技能 :对于目标范围内的敌人造成500/625/750(+75%魔法加成)点魔法伤害int num=(int)(500+0.75*ad+125*lv);//技能造成伤害以血量减少实现van.hp -=num;//输出技能攻击结果System.out.print(nameID+"使用臭气弹攻击力"+van.nameID);System.out.println("使其减少了"+num+"的血量,王还hp还剩"+van.hp);}
在这里会遇到一个问题—有两个可以攻击的对象
- 解决办法一 ---写两个一样的方法分别以另外两个对象为参数
//设计技能public void chouqidan(Van van) {//田所浩二类的技能 :对于目标范围内的敌人造成500/625/750(+75%魔法加成)点魔法伤害int num=(int)(500+0.75*ad+125*lv);//技能造成伤害以血量减少实现van.hp -=num;//输出技能攻击结果System.out.print(nameID+"使用臭气弹攻击力"+van.nameID);System.out.println("使其减少了"+num+"的血量,王还hp还剩"+van.hp);}public void chouqidan(SunShangxiang ssx) {//田所浩二类的技能 :对于目标范围内的敌人造成500/625/750(+75%魔法加成)点魔法伤害int num=(int)(500+0.75*ad+125*lv);//技能造成伤害以血量减少实现ssx.hp -=num;//输出技能攻击结果System.out.print(nameID+"使用臭气弹攻击力"+ssx.nameID);System.out.println("使其减少了"+num+"的血量,王还hp还剩"+ssx.hp);}
在另外两个类中也需要再加一个以先辈类对象为参数的方法
ssx
public void ack_3(Xianbei tiansuohaoer) {//孙尚香类的技能 :对于目标范围内的敌人造成500/625/750(+75%魔法加成)点魔法伤害int num=(int)(500+0.75*ad+125*lv);//将结果强制转为整数型--小数点后全部直接省略//计算一次技能攻击之后的血量tiansuohaoer.hp -=num;//输出攻击结果System.out.print(nameID+"使用技能攻击了"+tiansuohaoer.nameID);System.out.println(tiansuohaoer.nameID+"减少了"+num+"血量,还剩hp"+tiansuohaoer.hp);}
van
public void ack_3(Xianbei tiansuohaoer) {//Van类的技能 :对范围内的敌人造成700/1000/1300(+90%物理加成)点物理伤害int num=(int)(700+0.9*ad+300*lv);//将结果强制转为整数型--小数点后全部直接省略//计算一次技能攻击之后的血量tiansuohaoer.hp -=num;//输出攻击结果System.out.print(nameID+"使用技能攻击了"+tiansuohaoer.nameID);System.out.println(tiansuohaoer.nameID+"减少了"+num+"血量,还剩hp"+tiansuohaoer.hp);}
将新的角色类在对战程序中创建类
类比于上述角色类对象的创建
//加入第三个角色的属性用于擂台对战tiansuohaoer.nameID="野兽先辈";tiansuohaoer.ad=200;tiansuohaoer.hp=2500;tiansuohaoer.lv=3;
选出胜利者
以if语句来通过判断血量值来判断谁胜谁负
//选出胜利的那一个英雄与另外一个英雄PKif(ssx.hp>0) {}else {}
让胜利者与加入的第三个角色PK
再次用while语句来设置循环对战并分别加入if else语句中
分别设置循环对战
孙尚香与野兽先辈
while(ssx.hp>0&&tiansuohaoer.hp>0) {ssx.ack_3(tiansuohaoer);//为了保证田所浩二每次攻击之前血量都大于0if(tiansuohaoer.hp>0) {tiansuohaoer.chouqidan(ssx);}}
Van和野兽先辈
while(tiansuohaoer.hp>0&&van.hp>0) {tiansuohaoer.chouqidan(van);//为了保证田所浩二每次攻击之前血量都大于0if(tiansuohaoer.hp>0) {tiansuohaoer.chouqidan(van);}}
将其加入if else结构中组成选择和对战程序
//选出胜利的那一个英雄与另外一个英雄PKif(ssx.hp>0) {while(ssx.hp>0&&tiansuohaoer.hp>0) {ssx.ack_3(tiansuohaoer);//为了保证田所浩二每次攻击之前血量都大于0if(tiansuohaoer.hp>0) {tiansuohaoer.chouqidan(ssx);}}}else {while(tiansuohaoer.hp>0&&van.hp>0) {tiansuohaoer.chouqidan(van);//为了保证田所浩二每次攻击之前血量都大于0if(tiansuohaoer.hp>0) {tiansuohaoer.chouqidan(van);}}}
判断最终游戏的胜负
用if结构来判断最终的胜者
//判断哪一方胜利//由于所需要判断的对象有三个,所以我使用三个if结构而不是if else结构来判断他们的胜利if(ssx.hp>0) {System.out.print(ssx.nameID+"更勇!!");}if(van.hp>0){System.out.print(van.nameID+"更勇!!");}if(tiansuohaoer.hp>0){System.out.print(tiansuohaoer.nameID+"更勇!!");}
我的问题:如何简化技能的设置以致我们可以在对战对象较多时不用重复设置方法就能应对所有对象?
如何用java编写一个简单的多人PK游戏相关推荐
- Java实现一个简单的两人五子棋游戏(一) 系统设计
实现一个基本的单机五子棋功能 该五子棋棋盘大小为19*19的网格,玩家可以通过鼠标点击棋盘来落子,当出现五连珠时,提示一方胜出~ 1)模块划分 主模块:调用其他模块实现五子棋功能 棋盘模块:绘制五子棋 ...
- 如何用Java编写一个简单的服务器和客户机
今天我要向大家介绍的是自己编写的一个比较简单的服务器和客户机程序,注意一下哦,比较简单.好了,闲话休提,砸门直入主题. 小编先从客户机和服务器的模型开始讲解.简单来说,我们实现的这种模型呢,我们每一个 ...
- 如何利用JAVA编写一个简单的石头剪刀布的小游戏
楼主为了完成作业,花了一小会时间自己琢磨了一下,写出了这个石头剪刀布的小游戏. 思路很简单,就是令石头=2,剪刀=1,布=0,那么电脑随机生成一个数,分别去对应,游戏者同时也输入一个数字,也是对应着前 ...
- Java实现一个简单的两人五子棋游戏(六) 行棋方变换
1)选择棋子 ✔️ 2)画棋子 ✔️ 3)判断胜负 ✔️ 4)交换行棋方 目标 前面我们已经画好棋盘和棋子,并可以自由落子,且可以判断棋盘中是否有五连珠.接下来的工作是,每次落子后交换行棋方(即将下一 ...
- java编写存钱_用Java编写一个简单的存款
package desposit.money; public class DespositMoney { public static void main(String[] args) { Custom ...
- 用java编写一个简单计算器
java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...
- 如何用FFmpeg编写一个简单播放器详细步骤介绍
如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具.FFMPEG几乎为你把所有的繁重工作都做了,比如解码.编码.复用和解复用. ...
- 如何用 FFmpeg 编写一个简单播放器.pdf
An ffmpeg and SDL Tutorial.pdf 如何用 FFmpeg 编写一个简单播放器.pdf 中文版
- 如何用Java设计一个简单的窗口界面(学习中.1)
如何用Java设计一个简单的窗口界面 一.前言 二.简单了解 1.Swing简介 2.框架(frame) 3.层次 三.步骤 1.打开eclipse,依次创建项目,包,类. 2.代码 2.1最简单的可 ...
最新文章
- Yii框架控制台报错: The id configuration for the Application is required
- 浏览器时间久了重新登录_以登录为例讲解什么是全面的测试设计
- 深度学习(30)随机梯度下降七: 多层感知机梯度(反向传播算法)
- jmu-python-函数-找钱_python函数题 - osc_wv1mxwu2的个人空间 - OSCHINA - 中文开源技术交流社区...
- 极简好看的个人介绍页源码
- Spring 4 xml 注解配置谅解 spring
- “您都对”、“客户都对”也能申请为商标?
- 在Android中通过导入静态数据库来提高应用第一次的启动速度
- Visual Studio 2015离线版msdn帮助文档下载和安装
- JavaScript从入门到精通(全)
- 吊打迅雷,最好用的BT种子下载器,下载不限速
- Hadoop集群上的Hive安装时进行初始化元数据信息出现错误HiveSchemaTool:Parsing failed. Reason: Missing required option:
- 转:NO.523 Aidan HawkenCarina Round - Walking Blind
- unity怎么显示骨骼_Unity骨骼动画的总结
- Android 模拟手指滑动
- 会计科目主数据 由非成本要素变为成本要素
- 基于pandas的粗糙集依赖度约简算法思路及实现
- 敏捷Scrum指南一:Scrum起源
- 图像、文字、表格识别开发工具
- 涨粉秘籍 | 如何快速涨粉并转化为铁粉?
热门文章
- 计算机毕业论文java毕业设计成品源码网站基于JavaWeb实现的停车场车位收费管理系统
- HBASE的hmaster报java.lang.RuntimeException: HMaster Aborted
- http抓包分析GET延迟(wireshark)
- 关于荣耀x30 Max值不值得买 看完下文就明白
- kaggle_Titanic练习经验
- audio标签后台播放
- android大屏适配_Android 全面屏适配
- 干货!基于元学习的内容定向推广
- ARP攻击和防御实验
- [软件/环境/配置_01]Cass安装中常遇到的三个问题解决办法