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

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...
应急食物的梗来自游戏原神,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,他的值是2
        changeValue(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 、 使用changeValue
        System.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
下节课的链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值