Unreal Engine 游戏开发学习笔记 20181101


本篇博文实为在”系统”学习 Unreal Engine 4 游戏开发后整理的学习笔记。笔记按照每天的学习内容进行整理记录备忘。

本文为 Week2 Class4! 其中 表示上午的学习内容, 表示下午的学习内容。从本周开始连续三周学习 C++ 基础。同时强烈推荐像我一样的初学者看下”菜鸟教程”的 C++ 部分,本周的笔记绝大部分整理的内容均来自菜鸟笔记,只是内容按照上课老师所讲并在笔记中穿插了一些老师上课所讲实例,感谢菜鸟笔记网站管理员的无私分享。

今日内容摘要(知识点梳理):
上午主要讲解周三作业及练习for循环的嵌套 文件为Week3_Class04_Practice.cpp
下午新课程部分为本文件。


周三作业的讲解及For循环使用

作业辅导

求得数组中的最小值和索引号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int a[] = { 3,5,8,13,47,9 };
int MinValue = a[0];
int MinIndex = 0;
int MaxValue = a[0];
int MaxIndex = 0;
for (int i = 1; i < 6; i++) {
if (a[i] < MinValue) {
MinValue = a[i];
MinIndex = i;
}
if (a[i] > MaxValue) {
MaxValue = a[i];
MaxIndex = i;
}
}
printf("%s %d %s %d %s %d %s %d %s ", "最小值: ", MinValue, "最小值序号:", MinIndex, "最大值: ", MaxValue, "最大值序号:", MaxIndex,"\n\n");

输入年月日,判断是今年的第几天

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int Year = 0, Month = 0, Days = 0, Result = 0;
int RunYear[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int NoRunYear[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
cout << "请输入年份" << endl << endl;
cin >> Year;
cout << "请输入月份" << endl << endl;
cin >> Month;
cout << "请输入第几天" << endl << endl;
cin >> Days;
if (Year % 4 == 0 && Year % 100 != 0 || Year % 400 == 0) {

cout << "闰年 29 天" << endl;
for (int i = 0; i < Month; i++) {
Result += RunYear[i];
}
Result += Days;
cout << "今天是 " << Year << " 的第 " << Result << "天!" << endl;

}
else {
cout << "平年 28 天" << endl;
for (int i = 0; i < Month; i++) {
// cout << NoRunYear[i] << endl;
// cout << Month << endl;
Result += NoRunYear[i];
cout << Result << endl;
}
Result += Days;
cout << Result << endl;
//cout << "今天是 " << Year << " 的第 " << Result << "天!" << endl;
}

已知abc+cba = 1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合

1
2
3
4
5
6
7
8
9
for (int a = 0; a <= 9; a++) {
for (int b = 0; b <= 9; b++) {
for (int c = 0; c <= 9; c++) {
if ((a * 100 + b * 10 + c) + (c * 100 + b * 10 + a) == 1333) {
cout << "a: " << a << " b: " << b << " c: " << c << endl;
}
}
}
}

取余的算法练习

1
2
3
4
int a = 135;
cout << a / 100 << endl;
cout << a % 10 << endl;
cout << a / 10 % 10 << endl;

打印图案

*
**
***
****

1
2
3
4
5
6
for (int i = 1; i < 5; i++) {
for (int j = 0; j < i; j++) {
cout << "*";
}
cout << endl;
}

打印图案

*****
****
***
**
*

1
2
3
4
5
6
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
cout << "*";
}
cout << endl;
}

打印图案

  *
 **
***

1
2
3
4
5
6
7
8
9
for (int i = 1; i < 4; i++) {
for (int k = 2; k > i - 1; k--) {
cout << " ";
}
for (int j = 1; j <= i; j++) {
cout << "*";
}
cout << endl;
}

打印乘法口诀表

 乘法口诀表

1
2
3
4
5
6
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << " * " << i << " = " << i * j << "\t"; //转义字符 \t 制表符
}
cout << endl;
}

函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

函数定义

C++ 中的函数定义的一般形式如下:

1
2
3
4
return_type function_name( parameter list )
{
body of the function
}

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

###实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 函数返回两个数中较大的那个数

int max(int num1, int num2)
{
// 局部变量声明
int result;

if (num1 > num2)
result = num1;
else
result = num2;

return result;
}

函数声明

函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

函数声明包括以下几个部分:

1
return_type function_name( parameter list );

针对上面定义的函数 max(),以下是函数声明:

1
int max(int num1, int num2);

在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:

1
int max(int, int);

当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

调用函数

创建 C++ 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;

// 函数声明
int max(int num1, int num2);

int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int ret;

// 调用函数来获取最大值
ret = max(a, b);

cout << "Max value is : " << ret << endl;

return 0;
}

// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
// 局部变量声明
int result;

if (num1 > num2)
result = num1;
else
result = num2;

return result;

把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:

1
Max value is : 200

函数参数

如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有两种向函数传递参数的方式:

传值调用(现在学习的)还有两种调用将在后面详细说明

该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
默认情况下,C++ 使用传值调用方法来传递参数。一般来说,这意味着函数内的代码不会改变用于调用函数的实际参数。函数 swap() 定义如下:

1
2
3
4
5
6
7
8
9
10
11
// 函数定义
void swap(int x, int y)
{
int temp;

temp = x; /* 保存 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */

return;
}

现在,让我们通过传递实际参数来调用函数 swap():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

// 函数声明
void swap(int x, int y);

int main ()
{
// 局部变量声明
int a = 100;
int b = 200;

cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;

// 调用函数来交换值
swap(a, b);

cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

1
2
3
4
交换前,a 的值: 100
交换前,b 的值: 200
交换后,a 的值: 100
交换后,b 的值: 200

参数的默认值

当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。
这是通过在函数定义中使用赋值运算符来为参数赋值的。调用函数时,如果未传递参数的值,则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。请看下面的实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;

int sum(int a, int b=20)
{
int result;

result = a + b;

return (result);
}

int main ()
{
// 局部变量声明
int a = 100;
int b = 200;
int result;

// 调用函数来添加值
result = sum(a, b);
cout << "Total value is :" << result << endl;

// 再次调用函数
result = sum(a);
cout << "Total value is :" << result << endl;

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

1
2
Total value is :300
Total value is :120


可能想问吧

今天上午讲解的主要是上午的作业辅导及函数基础,并没有很难,暂时没有想问的!


一起练习吧

  1. 实现一个函数根据用户输入的符号和数字计算两个数的+,-,* ,/.
  2. 实现函数打印数组,求最小值和位置。
  3. 实现函数求平方,立方。
  4. 打印
          *
        ***
      *****
    *******
  5. 函数实现 交换两个数。


上课代码笔记
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

//20181101 上午主要讲解周三作业及练习for循环的嵌套 文件为Week3_Class04_lianxi.cpp 下午新课程部分为本文件。

// 函数的定义
void MyPrintf() // 函数头儿
{
// 大括号内叫函数体
cout << "Hello" << endl;
cout << "World!" << endl;
}

void Fire()
{
cout << "开火!" << endl;
}

void FindMaxValueInArray(int IntArray[],int length)
{
// int length = sizeof(IntArray) / sizeof(IntArray[0]);
int MaxValue = IntArray[0]; // 假设数组的第一个值是最大值
for (int i = 1; i < length; i++) { // 第一个数与剩余的数比较大小
if (IntArray[i] > MaxValue) {
MaxValue = IntArray[i];
}
}
cout << "MAX VALUE: " << MaxValue << endl;
}

// 函数是实现功能的一段固定代码
int CalcSumOfArray(int IntArray[], int length) // int 表示返回值的类型 void 表示函数不返回值 函数名(参数1,参数2)
{
int ResultSum = 0;
for (int i = 0; i < length; i++) {
ResultSum += IntArray[i];
}
return ResultSum; // ResultSum (返回值)
}

float Plus(float a, float b)
{
float c = a + b;
return c;
}


int main()
{
// 函数的调用
MyPrintf();
int IntArray01[6] = { -25,20,3,15,8,100 };
int IntArray02[3] = { 1,2,3 };
FindMaxValueInArray(IntArray01,6);
cout <<"SUM: "<< CalcSumOfArray(IntArray02, 3) << endl;
return 0;
}




我的作业提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;


#define f2(a) (a) * (a)
#define f3(a) (a) * (a) * (a)\
int i = 3;
cout << f2(i);


float CalculateOperate(float a, float b, string c)
{
float Result = 0.0f;
if (c == "+") {
// Result = a + b;
cout << a << " + " << b << " = " << a + b << endl;
}
if (c == "-") {
// Result = a - b;
cout << a << " - " << b << " = " << a - b << endl;
}
if (c == "\*") {
// Result = a * b;
cout << a << " * " << b << " = " << a * b << endl;
}
if (c == "/") {
// Result = a / b;
cout << a << " / " << b << " = " << a / b << endl;
}
return 0;
}

int PrintMinValueAndIndexOfArray(int IntArray[],int length)
{

int MinValue = IntArray[0];
int MinValueIndex = 0;
for (int i = 1; i < length; i++) {
if (IntArray[i] < MinValue) {
MinValue = IntArray[i];
MinValueIndex = i;
}
}
cout << "最小值: " << MinValue << " 索引号为:" << MinValueIndex << endl;
return 0;
}

float SquareAndCubic(float a)
{
float SquareResult = 0.1f, CubicResult = 0.0f;
SquareResult = a * a;
CubicResult = a * a * a;
cout << "参数: " << a << " 求得平方: " << SquareResult << " 求得立方: " << CubicResult << endl;
// return SquareResult, CubicResult;
return 0;
}

void swap(int \*a, int \*b)
{
int temp = 0;
temp = \*a;
\*a = \*b;
\*b = temp;
}

int homework04()
{
// 第一题:
cout << "第一题: \n" << endl;
cout << CalculateOperate(3.5, 3.5, "+") << endl;
cout << endl;

// 第二题:
cout << "第二题: \n" << endl;
int IntArrayExample[6] = { -3,-52,1,-109,88,-100 };
cout << PrintMinValueAndIndexOfArray(IntArrayExample, 6) << endl;
cout << endl;

// 第三题:
cout << "第三题: \n" << endl;
SquareAndCubic(2);
cout << endl;

//第四题
cout << "第四题: \n" << endl;
for (int i = 1; i < 5; i++) {
for (int k = 3; k > i - 1; k--) {
cout << " ";
}
for (int j = 1; j <= i; j++) {
cout << "*";
}
for (int l = 0; l <= i-2; l++) {
cout << "*";
}

cout << endl;
}
cout << endl;

// 第五题:
// 此题采用了还没有学习的指针的方法,但就目前所学,其实是可以解决的!下次注意,不能人云亦云,用心去处理所有问题!
cout << "第五题: \n" << endl;
int a = 1, b = 5;
cout << "原始a= " << a << " 原始b= " << b << endl << endl;
swap(&a, &b);
cout << "交换后a= " << a << " 交换后b= " << b << endl<<endl;

return 0;

}


----------本文结束感谢您的阅读----------

本文标题:Unreal Engine 游戏开发学习笔记 20181101

文章作者:XIANVFX

发布时间:2018年11月01日 - 09:11

最后更新:2019年05月21日 - 09:05

原始链接:www.xianvfx.top/UE4/Training/Week2_CPP1/Unreal_Engine_Learning_Notes_W2_4.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

(*❦ω❦) 感谢您的支持! (*❦ω❦)
0%