Java 游戏开发:关于Java面向对象的知识(一)

软件的生命周期(了解即可)

由于我们是大专生 这里的生命周期是之前软件工程的笔记,你们了解就可以了

什么是软件的生命周期

一个软件从被开发到被正式弃用的过程,就是一个软件的生命周期(说白了 就是一个游戏的开服到停服)他还有一个术语叫做"系统开发生命周期"。

周期的模型

从需求提出的那一刻开始,软件产品就进入了软件生命周期,模型大致分为 瀑布模型(阶梯模型) 结构模型
图上的结构向瀑布一样的模型叫做瀑布模型(自己做的可能有点简陋…)

结构模型类似这样

面向对象开发:OO的生命周期的阶段

现在我们有一个业务需要完成——一个虚幻引擎打造的游戏,要完成这个任务,我们需要经历以下的阶段:

面向对象的分析OOA
分析:对开发程序的每个阶段进行的详细的分析,要是实现的功能的分析,要实现的系统的分类

也就是需求的分析

面向对象的设计OOD

一种OOA到OOP的过渡:

面向对象的编程OOP

就是编程咯~

方法(函数)

简单地方法

方法与函数的区别

函数:可以实现一定功能的代码块
方法:存放在类里面可以实现一定功能的单独的代码块

在Java、C++、C#为例子的语言中 函数必须在方法里面,所以在Java中所提到的函数都可以是方法
在Python、lua 、VB这些语言中,函数可以在类外面定义,所以函数是函数 方法是方法

ps:有些时候 方法叫做类方法

既然方法可以实现一个功能 ,我们可以将其理解成一个工具,如何定义一个特定功能的方法,是一个简单的事情:

public class Test{// 定义了一个叫做Test的类public static void SayHello(){// 这里定义了一个方法,下面的代码是方法的代码块System.out.println("我在说话");}public static void main(String[] args){SayHello(); // 使用方法}
}

其中语法就是:

[权限修饰符] [静态修饰符] 返回值 方法名称(参数类型 参数名称){
代码块;
}

至于什么是权限修饰符 什么是静态修饰符 我们之后可以细讲 现在你可以省略他们(但是入口方法的不要省略)

public class Test{void SayHello(){// 这样的写法也可以}
}


Q&A Time
Q:但是我们这样就无法在入口使用方法了,怎么解决呢?
A:main 是被 static 修饰的方法 所以他是静态的方法 静态的方法中不可以使用非静态的类成员(类成员就是方法与属性的统筹)
Q:如何解决?
A:给Speak()方法进行static的修饰即可:

Q:那么非静态的方法一般是怎样被调用的呢?

非静态的方法可以调用非静态的方法…

参数

有些时候我们需要给方法传入一个参数,用来控制代码的逻辑,比如我在写Galgame的时候(就是简单的对话游戏:像是草猫 之类的),我写了一个方法,这个方法实现了显示某个人物的语言信息,类似于这样:

public class GameMain{static void Speak(){String name = "旁白";String speakInfo = "欢迎光顾本游戏,我是负责吐槽的旁白君";Image touXiang = PANGBAI; // 旁白的头像图片 .... // 窗口设置的信息省略}
}

图中,所圈出的信息可能随着游戏的进展发生不同的人物的不同的对白,这些是我们可以人为控制的,所以我们可以使用参数来对这些需要变动的量 进行调整

其中人物的名称我们可以知道是String 类型的 对话的信息也是String类型的 人物的头像我们姑且他是Image自定义的类型的,这三个变量是需要改动的,所以我们要传入三个参数

public class GameWindow{...public static void Speak(String name,String speakInfo ,Image touXiang){.... // 窗口设置的信息省略}public static void main(String[] args){Speak("旁白","这个是可以自定义的",PANGBAI);}
}

这样我们就可以简单的实现旁白的自定义对话了

思考
既然如此,我们可不可以使用二维数组将我们对话的剧本信息呢?
就像是这样
{
{“商人”,“那跟在你旁边的人是谁?”},
{“玩家”,“那是我的应急食物”},
{“派蒙”,“我才不是呢”}
}
的数组,然后使用下标,遍历这个数组 然后每次遍历之后得到的元素作为参数传入Speak方法中 , 不就实现了连贯的对话?

应急食物的梗来自游戏原神,emm…

说着有趣了起来,打开编辑器,让我们来尝试着写写,但是我们暂时没有学习窗口,我们就试试简单地 console(控制台) 的打印:

public class game {static void speak(String name,String info){System.out.println(name+":");System.out.println("    "+ info);}public static void main(String[] args) {String[][] speakArray = {{"商人","那跟在你旁边的人是谁?"},{"玩家","那是我的应急食物"},{"派蒙","我才不是应急食物呢"}};// 一个简答的迷你小剧本for (String[] littleArray:speakArray){speak(littleArray[0],littleArray[1]);}}
}

运行结果就是这样:

说一下关于方法的作用域

我在方法外部创建了一个值 A ,然后我将 A 这个值作为了参数传入了方法B 中 ,方法B 对传入的参数进行了修改,但是即使如此,A的值还是不会发生任何的改变。

额,说的比抽象类还抽象…那么我们先来一段代码,你看看这个代码做个评价?

public class game {static void changeValue(int a){// 3 、 啊 c 被作为 参数 将 值 给了 a 变量a = 234567; // 4 、 a 的值发生了改变}public static void main(String[] args) {int c = 2; // 1 、 我定义了一个c,他的值是2changeValue(c); // 2 、 让c变量去changeValue在磨练下自己System.out.print(c); // 5、 打印 c}
}

你猜猜返回值是多少

如果答案是2 的话,恭喜你,你是有悟性的

至于为什么是2,看看第三步,c其实没有真正的进入changeValue方法的内存空间中,只是将c的值给了a,让 a 作为 c 进行工作,你以为 c 在方法里面拼命工作?其实他只是招了个临时小工,自己在一边风凉着呢~

我们再来看看这样的代码:

public class game {static int c = 23; // 1、 定义一个全局的成员变量static void changeValue(){//c = 234567; // 3 、 c 被无情的修改了}public static void main(String[] args) {changeValue(); // 2 、 使用changeValueSystem.out.print(c); // 4、 打印 c}
}

首先你一定会对第一步的全局变量进行疑问?
我们先来介绍一下这个半途杀出的嘉宾,全局变量,在介绍全局变量之前我们先来复习一下作用域,果然你还记得,大括号之间 是一个作用域,
我们有两个方法 A方法 与 B方法 A方法里面定义了Value 这个Value变量一般的 B方法是使用不了的 因为 Value 是A方法作用域的,我们来看看全局变量 他是game类作用域里面的,A方法与B方法正好也是game类作用域的,正好同级,那么就可以AB互用
emm… 看不懂?通俗一点:农民A有块地属于本人,上面中了土豆,农民B有块地,上面中了番茄,B农民不能去拿A农民的土豆,拿了就是犯罪(交易的话不算诶),A农民不能拿B的番茄,拿了也是犯罪 ,刚好就在AB双方的农场中间有个公共的厕所,那么AB双方都可以使用这个厕所,因为他是对外的,所以在写代码的时候 厕所就是全局变量
讲到这里你可以猜猜 c变量的值了对吧…
因为c变量是厕所 全局变量,所以main与changeValue都可以使用这个变量,changeValue可以使用当然可以修改,他将c修改成了234567那么在打印c的时候,c的值就是:

好了差不多今天的笔记就到这里了,这里留下道题,你可以试着做做:

public class game {static int c = 23; static void changeValue(int a){c = 12345;a = 234567; }public static void main(String[] args) {changeValue(c); System.out.println(c); System.out.println(a);}
}
/*
1 、上述代码会打印什么?
A、12345
234567
B、12345
12345
C、234567
234567
D、12345
报错
E、234567
12345
*/

差不多先预习到这里,明天我们在学习进一步的知识
mk:LiuBoyuan
下节课的链接

Java 游戏开发:关于Java面向对象的知识(一)相关推荐

  1. Java 游戏开发:关于Java面向对象的知识( 四)

    这是上期教程:Go To It! 新年过去了,鸽了几天的教程,今天我们开始继续学习(新年快乐~) 游戏人物类的实现 对于一个游戏人物而言,我们可以想到以下的字段: 最大血量 当前血量 名称 装备数组( ...

  2. 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目

    课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...

  3. java游戏开发杂谈 - 实现游戏主菜单

    经常玩游戏的同学,大家都知道,游戏都会有个主菜单,里面有多个菜单选项:开始游戏.游戏设置.关于游戏.退出游戏等等,这个菜单是怎么实现的呢. 有一定桌面软件开发基础的同学可能会想到,用JButton组件 ...

  4. java游戏开发(java游戏开发教程)

    Java游戏开发绘图器是什么呢? 众所周知,Java GUI以paint进行绘图,以repaint进行图像刷新,而完成repaint及paint这一连贯过程中所用到绘图组件,我将其称为绘图器.就我个人 ...

  5. 【Java游戏开发】坦克大战(附源码+课件+资料)

    本课程讲解了一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固你对面 ...

  6. 三七互娱 Java游戏开发工程师 面试(两轮技术+HR面)

    (2020春招补招,已拿到offer) 抱着投着试试看的心态去的 自己还是不太了解游戏开发 框架啊这些都没怎么问 比较重视基础知识,面的也基本都是基础知识 所以面完才发现自己太基础的知识反而一问三不知 ...

  7. 【11款最全最新】Java游戏开发项目合集_Java项目实战_Java练手项目

    黄金矿工.俄罗斯方块.飞机大战.超级玛丽.坦克大战.飞翔的小鸟.扫雷.王者荣耀.推箱子.贪吃蛇.大鱼吃小鱼这些经典小游戏相信很多人都玩过.那大家有没有想过亲自制作出这些小游戏呢? 下面就给大家分享这1 ...

  8. Java游戏开发《超级玛丽》附课件+源码+资料

    <超级玛丽>这款游戏想必大家都玩过,在市面上五花八门的游戏我们眼花缭乱,但是都无法与童年的记忆相比较,经典版的超级玛丽小编觉得是我们00后的童年回忆. 在你的童年记忆里,是否有一个会蹦跳, ...

  9. 游戏开发总结-java篇

    游戏开发总结-java篇 前言 网络通信 数据存储 逻辑开发 逻辑开发一般遇到的问题有: Java游戏服务器方面的开发要掌握的技术: java服务器目前主流框架技术 前言 Java语言,由于学习成本低 ...

最新文章

  1. mysql connector api_mysql connector c++ 1.1 API初步体验
  2. c语言怎么编程dll,【C语言】编写的DLL注入工具
  3. [SonarQube]Scanners内存溢出
  4. 安装完成后的配置_cent os7 默认安装后的一般配置
  5. MFC开发-树形菜单
  6. 《Java 8 in Action》Chapter 12:新的日期和时间API
  7. HTML和CSS实现品优购首页
  8. owa outlook使用中的一些问题-陆续添加
  9. (转)不看绝对后悔的Linux三剑客之awk实战精讲
  10. Python中用于身份证验证的库函数
  11. java 计时器归零_加一计时器——每隔1s六位数码管显示数字加1,直至999999,之后归零,重新开始。...
  12. ComicEnhancerPro 系列教程十八:JPG文件长度与质量
  13. Delphi 编写数字签名验证并获取签名信息
  14. Python的Pexpect模块详解
  15. 2023年选go还是python?
  16. fpga实操训练(uart串口)
  17. java hgetall_redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
  18. 一位算法工程师对自己工作的总结,非常具有借鉴意义!
  19. 应用深度学习function-loss-optimization 2020.8.24
  20. python实现Rot古典密码加解密

热门文章

  1. Servlet--j2e中文乱码解决
  2. ubuntu 16.04 安装微信 (亲测有效)
  3. Elasticsearch冷热分离原理和实践
  4. 那些藏在wordpress中的工具
  5. tensorflow中的正则化
  6. LAMP源码编译安装之Apache
  7. java检测服务器之间网络状况及丢包率
  8. Flask框架及jinja2引擎模版
  9. Slick.AI用户案例-皮肤疾病图像检测辅助诊断
  10. 大数据平台展示可视化效果,echarts图表实战项目(源码50套)