﻿1
00:00:04,300 --> 00:00:05,230
‫أهلا ومرحبا.

2
00:00:05,230 --> 00:00:12,160
‫في هذه المحاضرة ، سننظر في وجود بعض الخيارات في سلوكياتنا بحيث يمكن أن

3
00:00:12,160 --> 00:00:20,500
‫يكون لدي عدو يركض نحوي وإذا غاب عني ، فإنه يأتي إلى آخر موقع معروف لي ويقوم بسلوكين أساسيين

4
00:00:20,500 --> 00:00:24,250
‫مطاردة ثم بعد ذلك سلوك التحقيق.

5
00:00:24,250 --> 00:00:26,080
‫دعونا نتعمق ونرى كيف يمكن تحقيق ذلك.

6
00:00:26,080 --> 00:00:27,370
‫استخدام أشجار السلوك.

7
00:00:28,470 --> 00:00:34,590
‫لذا في حين أن سلوك الدوريات هذا مفيد للغاية ، إلا أنه في الحقيقة ليس نوع السلوك الذي نريد

8
00:00:34,590 --> 00:00:35,520
‫تنفيذه.

9
00:00:35,700 --> 00:00:39,300
‫ما نفضله هو شيء على غرار ما يلي.

10
00:00:39,300 --> 00:00:44,820
‫عندما نتمكن من رؤية اللاعب ، نذهب ونقترب منه قدر الإمكان.

11
00:00:45,240 --> 00:00:51,900
‫وعندما يخرج اللاعب عن الأنظار ، نحاول الانتقال إلى آخر موقع معروف للاعب للعثور

12
00:00:51,900 --> 00:00:52,670
‫عليهم.

13
00:00:52,680 --> 00:00:58,470
‫وبمجرد استنفاد هذا الخيار ، ربما نعود إلى موقع مختلف ، أو ربما

14
00:00:58,470 --> 00:01:00,390
‫نبقى هناك الآن.

15
00:01:00,840 --> 00:01:02,430
‫فكيف نحقق ذلك؟

16
00:01:02,460 --> 00:01:05,910
‫حسنًا ، في الوقت الحالي ، ليس لدينا طريقة لتحقيق ذلك بسلسلة من الإجراءات.

17
00:01:05,910 --> 00:01:09,240
‫نحتاج إلى الاختيار بناءً على البيانات المتوفرة لدينا.

18
00:01:09,240 --> 00:01:15,270
‫نحتاج إلى الاختيار بين ما إذا كان بإمكاننا رؤية اللاعب أو ما إذا كنا لا نستطيع ، سواء كان لدينا

19
00:01:15,270 --> 00:01:18,680
‫آخر موقع معروف للاعب أم لا ، هذا النوع من الأشياء.

20
00:01:18,720 --> 00:01:24,060
‫للقيام بذلك ، نحتاج إلى نوع جديد من العقدة في شجرة السلوك يسمى عقدة المحدد.

21
00:01:24,060 --> 00:01:29,280
‫لذلك إذا نقرنا بزر الماوس الأيمن وألقينا نظرة على مركباتنا ، فإن أحد الخيارات هو المحدد.

22
00:01:29,430 --> 00:01:33,330
‫الآن المحدد على عكس التسلسل يعمل على هذا النحو.

23
00:01:33,360 --> 00:01:40,740
‫إذا كانت لديك مجموعة من المهام أسفل المحدد ، فسيتم تشغيلها حتى تنجح المهمة الأولى.

24
00:01:40,740 --> 00:01:45,420
‫ومن المتوقع في الأساس أن يفشل كل منهم حتى ينجح أحدهم.

25
00:01:45,660 --> 00:01:48,210
‫الآن التسلسل فعل العكس.

26
00:01:48,210 --> 00:01:50,460
‫يدير كل منهم حتى يفشل واحد منهم.

27
00:01:50,640 --> 00:01:52,820
‫فلماذا هذا مفيد؟

28
00:01:52,830 --> 00:01:56,640
‫لماذا من المفيد أن يقوم المحدد بتشغيل واحد منهم وما زال أحدهم ينجح؟

29
00:01:56,640 --> 00:02:01,140
‫لأننا في الأساس نريده أن يختار الخيار الأول القابل للتطبيق.

30
00:02:01,830 --> 00:02:06,840
‫الآن ، الطريقة التي سنقوم بها لا تتمثل في تشغيل المهام في الواقع أسفل المحدد ، ولكن

31
00:02:06,840 --> 00:02:08,970
‫تشغيل التسلسلات أسفل المحدد.

32
00:02:08,970 --> 00:02:12,360
‫لذلك على مستوى الجذر ، سنقوم بعمل عقدة محددة.

33
00:02:12,570 --> 00:02:17,160
‫وبعد ذلك ، دعنا نحرك هذا التسلسل جانبًا وننشئ متواليات أخرى.

34
00:02:17,160 --> 00:02:23,220
‫سيكون لدينا تسلسل واحد هنا ، وما يمكننا فعله هو أنه يمكننا في الواقع

35
00:02:23,220 --> 00:02:31,080
‫إعادة تسمية التسلسل من التسلسل إلى شيء مثل تشيس ، ومن ثم يمكننا إضافة تسلسل آخر هنا ،

36
00:02:31,080 --> 00:02:35,280
‫والذي سيكون على طول الخطوط من التحقيق.

37
00:02:35,990 --> 00:02:41,600
‫وهذان هما في الأساس سلوكان نريد أن نكون قادرين على الاختيار بينهما.

38
00:02:42,140 --> 00:02:49,210
‫ومن أجل جعلها تفشل ، يمكننا إضافة أشياء إلى العقد تسمى الديكور.

39
00:02:49,220 --> 00:02:55,130
‫لذلك إذا نقرت بزر الماوس الأيمن على عقدة وذهبت لإضافة مصمم ، يمكنك أن ترى هنا مجموعة

40
00:02:55,370 --> 00:02:59,500
‫من الخيارات هنا وهي تغير طريقة عمل هذه العقدة بشكل أساسي.

41
00:02:59,510 --> 00:03:00,920
‫ثم يمكنهم فعل ذلك بعدة طرق.

42
00:03:00,920 --> 00:03:05,870
‫على سبيل المثال ، لدينا هذه الحلقة الشرطية التي تسمح لك بالمرور عبر جميع الإجراءات مرة

43
00:03:05,870 --> 00:03:08,960
‫أخرى في التسلسل عدة مرات حيث يكون هذا الشرط صحيحًا.

44
00:03:09,110 --> 00:03:15,830
‫لدينا أشياء أخرى هنا ، مثل الفحص المخروطي ، والذي يتعلق بالرؤية وأشياء أخرى جميلة من هذا القبيل.

45
00:03:15,830 --> 00:03:17,990
‫لقد حصلنا فقط على حلقة نقية.

46
00:03:18,110 --> 00:03:22,910
‫لدينا حد زمني ، لذلك يمكننا فقط البقاء داخل هذا التسلسل لفترة زمنية

47
00:03:22,910 --> 00:03:23,450
‫معينة.

48
00:03:23,450 --> 00:03:27,200
‫في الأساس الكثير من الأشياء التي تعدل سلوك هذا التسلسل.

49
00:03:27,200 --> 00:03:33,320
‫لكن الشيء الذي نهتم به هو السبورة ، لأن هذه حالة سبورة.

50
00:03:33,320 --> 00:03:38,150
‫وكما ترون من الكتابة الموجودة تحتها ، فإن الافتراضي هو شيء على غرار هل تم

51
00:03:38,150 --> 00:03:39,950
‫تعيين هذا الممثل الذاتي؟

52
00:03:40,130 --> 00:03:47,000
‫وإذا لم يتم تعيين هذا ، فستفشل هذه العقدة تلقائيًا وكل شيء تحتها ، مما يعني أن مُحدِّدنا

53
00:03:47,000 --> 00:03:51,050
‫سينتقل إلى الخيار الثاني ، وهو التحقيق.

54
00:03:51,170 --> 00:03:53,840
‫لذا في هذه الحالة ، نريد تغيير ذلك.

55
00:03:53,840 --> 00:03:55,220
‫نريد تغيير طريقة عمل هذا.

56
00:03:55,220 --> 00:04:02,420
‫لذا فإن موقع لاعبنا ، نريد أن يكون هذا بحيث يتم ضبطه فقط عندما يكون اللاعب مرئيًا.

57
00:04:02,420 --> 00:04:10,310
‫ثم نريد إضافة متغير جديد هنا مرة أخرى ، سيكون المتجه الذي سيكون آخر موقع معروف للاعب

58
00:04:10,310 --> 00:04:16,250
‫وآخر موقع معروف للاعب عندما يكون اللاعب مرئيًا سيكون هو نفسه.

59
00:04:16,400 --> 00:04:22,460
‫ولكن بمجرد أن يصبح اللاعب غير مرئي ، لا يتم ضبط موقع اللاعب ويكون آخر موقع معروف للاعب هو المكان

60
00:04:22,460 --> 00:04:24,080
‫الذي نريد الذهاب إليه.

61
00:04:24,590 --> 00:04:30,290
‫لذلك يمكننا القيام بذلك عن طريق الانتقال إلى حالة قاعدة Blackboard الخاصة بنا وتغييرها فقط

62
00:04:30,290 --> 00:04:35,330
‫إلى أن يكون الاستعلام ليكون نعم ، ولكن الشيء الذي نريد تعيينه هو موقع المشغل.

63
00:04:35,330 --> 00:04:41,960
‫لذلك إذا تم تعيين موقع اللاعب ، فسنمنح Chase وسنمنح Chase من خلال القيام

64
00:04:41,960 --> 00:04:48,020
‫ببساطة بنقل إلى مكان اللاعب وسننتقل إلى موقع اللاعب مثل.

65
00:04:48,020 --> 00:04:51,770
‫لذا فنحن الآن لا نقوم بالكثير من الأمور الأخرى في ظل هذا التسلسل.

66
00:04:51,770 --> 00:04:58,490
‫لذلك في الواقع ، يمكنك وضع حالة السبورة هذه مباشرة أثناء التنقل أيضًا ، ولكن نظرًا لأننا قد نرغب في القيام

67
00:04:58,490 --> 00:05:02,390
‫بأشياء أخرى مثل التصوير ، سأتركها كسلسلة في الوقت الحالي.

68
00:05:02,510 --> 00:05:04,070
‫ومن ثم لدينا هذا التحقيق.

69
00:05:04,070 --> 00:05:10,490
‫يقوم التحقيق أيضًا بشكل أساسي بإجراء حركة أيضًا ، ولكنه سينتقل إلى

70
00:05:10,490 --> 00:05:16,250
‫موقع المشغل الأخير بدلاً من الانتقال إلى موقع اللاعب.

71
00:05:16,490 --> 00:05:23,030
‫ويمكنك أن ترى أننا لا نملك شرطًا بشأن ذلك لأن هذا يحدث إذا فشلت هذه الحالة.

72
00:05:23,300 --> 00:05:29,240
‫أحد الأشياء المهمة التي يجب ملاحظتها حول شروط السبورة هذه هو أنه بشكل افتراضي

73
00:05:29,240 --> 00:05:34,130
‫، بمجرد أن نتخذ قرار بدء تنفيذ هذه العقدة ، لن نعيد تقييم ذلك.

74
00:05:34,130 --> 00:05:39,830
‫لذلك إذا فقدنا رؤية اللاعب لسبب ما أثناء انتقالنا إلى موقع ذلك اللاعب ، فسنستمر

75
00:05:39,830 --> 00:05:41,810
‫في محاولة الوصول إلى هناك.

76
00:05:41,960 --> 00:05:49,610
‫لذا ، إذا أردنا أن تكون قادرة على إحباط تنفيذ هذه العقدة ، فهناك خيار لذلك.

77
00:05:49,610 --> 00:05:53,780
‫إذا ذهبت إلى التحكم في التدفق ، فهناك مراقبون تم إخطارهم ويوجد تحتها.

78
00:05:53,780 --> 00:05:56,270
‫إحباط المراقب في الوقت الحالي إلى لا شيء.

79
00:05:56,510 --> 00:05:58,700
‫ولكن يمكنك الاختيار من بين عدة خيارات.

80
00:05:59,180 --> 00:06:00,830
‫يمكنك ضبطه على الذات.

81
00:06:00,830 --> 00:06:07,850
‫هذا يعني أنه إذا أصبحت هذه الحالة خاطئة فجأة ، فتوقف عما تفعله وأعد تقييم المحدد

82
00:06:07,850 --> 00:06:09,800
‫الخاص بك وانظر.

83
00:06:09,800 --> 00:06:11,780
‫ربما نحتاج الآن إلى إجراء التحقيق.

84
00:06:11,780 --> 00:06:18,530
‫ملاحظة الخيار الآخر هنا ذو أولوية أقل ويمكنك أن ترى أنه تم تغيير ما تم تمييزه هنا.

85
00:06:18,530 --> 00:06:24,440
‫إنه يقول إذا أصبحت حالة السبورة هذه صحيحة فجأة ، توقف عن أي شيء آخر كنا نفعله وابدأ

86
00:06:24,440 --> 00:06:27,050
‫في تنفيذ شرط المطاردة هذا.

87
00:06:27,260 --> 00:06:29,840
‫ثم الخيار الأخير هو كلاهما.

88
00:06:29,840 --> 00:06:31,160
‫وهذا هو الذي نريده.

89
00:06:31,160 --> 00:06:37,220
‫في الأساس ، تقول أن هذا الشرط القائم على السبورة ، إذا أصبح صحيحًا ، نبدأ في تنفيذ هذا

90
00:06:37,220 --> 00:06:38,690
‫التسلسل على الفور.

91
00:06:38,690 --> 00:06:44,150
‫إذا أصبح خطأ ، نتوقف عن تنفيذه على الفور أو نتوقف عن تنفيذ أي شيء آخر يحدث.

92
00:06:44,150 --> 00:06:51,380
‫نريد فقط أن نذهب دائمًا ونفعل أي مسار تمليه حالة السبورة هذه.

93
00:06:51,380 --> 00:06:56,750
‫لذلك نأمل أن يكون من المنطقي أن يقوم المراقب بإجهاض الأشياء في العمل ، وإلا فإنه

94
00:06:56,750 --> 00:06:59,960
‫سينتظر حتى ينتهي الإجراء قبل إعادة التقييم.

95
00:07:00,380 --> 00:07:07,130
‫لذلك حقًا ، نريد الآن المضي قدمًا وتنفيذ آخر موقع لعب معروف وموقع لاعب ، لأنه في الوقت

96
00:07:07,130 --> 00:07:13,100
‫الحالي ، إذا انتقلنا إلى C ++ وأعطينا مساحة أكبر قليلاً ، فيمكنك أن ترى أننا

97
00:07:13,100 --> 00:07:16,370
‫فقط تحديد موقع هذا اللاعب في بدء اللعب.

98
00:07:16,370 --> 00:07:21,440
‫من الناحية المثالية ، سنفعل هذا في كل مرة يكون لدينا فيها خط رؤية لبيدق لاعبنا ، لذلك يمكننا في الواقع

99
00:07:21,440 --> 00:07:23,780
‫إلغاء تعليق رمز خط الرؤية لدينا هنا.

100
00:07:23,960 --> 00:07:27,470
‫وربما نريد إلغاء التعليق على كود else أيضًا.

101
00:07:27,470 --> 00:07:32,330
‫لكننا في هذه الحالة لن نزيل التركيز ونوقف الحركة بشكل مباشر.

102
00:07:32,330 --> 00:07:35,570
‫يمكنني المضي قدمًا وإزالتها تمامًا لأن.

103
00:07:35,640 --> 00:07:37,830
‫هذه ليست الطريقة التي نؤدي بها الأشياء في الوقت الحالي.

104
00:07:38,010 --> 00:07:47,160
‫بدلاً من ذلك ، ما نريد القيام به ، إذا قمت بإزالة الرمز ، هو أننا نريد أن نكون هنا لتحديد موقع

105
00:07:47,160 --> 00:07:48,200
‫اللاعب.

106
00:07:48,210 --> 00:07:59,820
‫نريد أيضًا تعيين آخر موقع معروف هناك وفي أماكن أخرى نريد مسح موقع المشغل.

107
00:08:00,210 --> 00:08:07,860
‫الآن للقيام بذلك ، لدينا وظيفة متاحة لنا وهي بدلاً من القيمة المحددة كمتجه ،

108
00:08:07,860 --> 00:08:17,250
‫إذا تقدمنا وفتحنا مكون السبورة لدينا ، فهناك قيمة واضحة وهذا يأخذ اسم f فقط ، لا يحتاج لأخذ نوع

109
00:08:17,250 --> 00:08:22,800
‫أو أي شيء أو لأننا نقوم بمسح كل ما كان موجودًا في هذا المتغير

110
00:08:22,800 --> 00:08:24,090
‫تمامًا.

111
00:08:24,480 --> 00:08:28,140
‫لذا لدي هنا التحدي بالنسبة لك لملء مجموعة القراد الخاصة بنا.

112
00:08:28,140 --> 00:08:35,010
‫المتغيرين عند خط الرؤية ، يملأ الجزء الأول من عبارة if بشكل أساسي ثم يمسح

113
00:08:35,010 --> 00:08:39,270
‫موقع المشغل عندما يكون لدينا البديل.

114
00:08:39,270 --> 00:08:42,210
‫لذلك عندما نفقد خط البصر ، لم يعد لدينا موقع لاعب بعد الآن.

115
00:08:42,240 --> 00:08:48,510
‫قلل من سرعة العدو الموجود في العالم حتى تتمكن من الابتعاد عنه بسهولة أكبر.

116
00:08:48,510 --> 00:08:54,780
‫ثم تحقق من الوظيفة ، وتحقق من قدرتك على الاختباء خلف زاوية وأنه ينتقل إلى آخر موقع

117
00:08:54,780 --> 00:08:57,150
‫معروف لمحاولة العثور عليك.

118
00:08:57,240 --> 00:08:59,460
‫أوقف الفيديو مؤقتًا وجرب هذا.

119
00:09:00,490 --> 00:09:00,820
‫تمام.

120
00:09:00,820 --> 00:09:01,420
‫مرحبًا بعودتك.

121
00:09:01,420 --> 00:09:02,560
‫لذلك دعونا نجرب هذا.

122
00:09:02,560 --> 00:09:04,240
‫بادئ ذي بدء ، نحن نحدد موقع اللعب.

123
00:09:04,240 --> 00:09:07,240
‫سأقوم بنقل ذلك من بدء اللعب ونقله هنا بدلاً من ذلك.

124
00:09:07,330 --> 00:09:12,880
‫لذلك سنقوم بتعيين موقع اللاعب على أننا نحتاج إلى الحصول على اللاعب بيدق هنا ووضع علامة مرة أخرى.

125
00:09:12,880 --> 00:09:19,180
‫لذلك سأقوم بإلغاء التعليق على هذا السطر ثم نقوم بعمل نفس الشيء بالضبط ، نفس سطر الكود بالضبط

126
00:09:19,180 --> 00:09:22,000
‫لموقع آخر لاعب معروف لدينا هنا.

127
00:09:22,000 --> 00:09:28,060
‫لذلك دعنا نذهب إلى السبورة ونتأكد فقط من نسخها حتى نحصل على نفس الاسم

128
00:09:28,060 --> 00:09:33,160
‫تمامًا ثم نريد فقط توضيح أن آخر شيء هو مسح موقع لاعبنا هنا.

129
00:09:33,160 --> 00:09:39,610
‫لذلك ستكون قيمة واضحة وستأخذ موقع مشغل النص هذا على أنه القيمة التي نحاول

130
00:09:39,610 --> 00:09:41,980
‫توضيحها في النهاية.

131
00:09:42,280 --> 00:09:46,870
‫ويمكننا المضي قدمًا والتجميع ومعرفة ما إذا كان هذا يعمل.

132
00:09:48,640 --> 00:09:50,530
‫حسنًا ، كان التجميع ناجحًا.

133
00:09:50,530 --> 00:09:55,870
‫الشيء الآخر الذي قلته لفعله لتسهيل تصحيح الأخطاء هو اختيار

134
00:09:55,870 --> 00:10:04,360
‫العدو ويمكننا تغيير سرعته من خلال النزول إلى مكون حركته والعثور على المشي وإيجاد سرعته.

135
00:10:04,360 --> 00:10:07,270
‫لذا فإن سرعة Max Walk هي 600 هنا.

136
00:10:07,300 --> 00:10:11,470
‫فلنقم بتخفيضها إلى 400 حتى نتمكن من الابتعاد عنها بسهولة.

137
00:10:11,470 --> 00:10:15,220
‫سوف يمشون ببطء بعض الشيء ويمضون قدمًا ويلعبون.

138
00:10:15,220 --> 00:10:16,720
‫إنهم يسيرون نحونا ببطء.

139
00:10:16,720 --> 00:10:18,010
‫يمكننا الهرب.

140
00:10:18,040 --> 00:10:22,840
‫نختبئ وراء ركن وها هم يأتون بحثًا عنا في كل مرة.

141
00:10:22,840 --> 00:10:28,120
‫لكن نأمل إذا اختبأنا خلف زاويتين ، فلن يتمكنوا من العثور علينا.

142
00:10:28,120 --> 00:10:31,210
‫لذا أختبئ هناك ، أختبئ هنا ، أختبئ هنا.

143
00:10:31,210 --> 00:10:35,350
‫وسيقوم بالتحقيق في آخر موقع معروف ، كما ترى ، لقد طعن رأسه

144
00:10:35,350 --> 00:10:39,730
‫في الزاوية ، لكنه بعد ذلك عالق هناك لأنه لا يعرف ماذا يفعل.

145
00:10:39,790 --> 00:10:46,960
‫وإذا أردنا أن نذهب ونلقي نظرة على شجرة سلوكنا وقمنا بوضع هذا في جانب واللعبة على الجانب

146
00:10:46,960 --> 00:10:50,110
‫الآخر ومنح نفسي مساحة صغيرة.

147
00:10:50,200 --> 00:10:54,940
‫ثم إذا ألقينا نظرة على شجرة السلوك ، يمكننا أن نرى أنها نوع من الجاز هنا لأنها

148
00:10:54,940 --> 00:10:56,680
‫لا تستطيع فعل أي منهما.

149
00:10:56,680 --> 00:11:00,400
‫إنها تحاول الانتقال إلى آخر موقع معروف نجح.

150
00:11:00,400 --> 00:11:01,930
‫لذا فقد أصبح عالقًا بعض الشيء هنا.

151
00:11:01,930 --> 00:11:05,980
‫لكن إذا رأيت ، يمكنك أن ترى أنه يتحرك نحوي.

152
00:11:05,980 --> 00:11:11,830
‫إذا غاب عني ، يتوجه إلى حالة التحقيق.

153
00:11:11,830 --> 00:11:12,760
‫حتى تفقد البصر.

154
00:11:12,760 --> 00:11:14,110
‫سوف يقوم بالتحقيق.

155
00:11:14,110 --> 00:11:18,130
‫ثم يأتي ويراني ثم يعود لمطاردتي.

156
00:11:18,130 --> 00:11:20,800
‫إذن هذا السلوك يعمل بالفعل.

157
00:11:20,800 --> 00:11:29,170
‫نحن الآن قادرون على الاختيار بين محاولة المطاردة ومحاولة التحقيق بناءً على سلوك السبورة

158
00:11:29,170 --> 00:11:29,710
‫هذا.

159
00:11:29,710 --> 00:11:37,210
‫دعنا فقط نغير اسم السبورة إلى السلوك هنا لرؤية علامة استفهام للاعب.

160
00:11:37,210 --> 00:11:38,890
‫لذلك سيكون هذا أسهل في القراءة.

161
00:11:38,890 --> 00:11:43,990
‫الآن لدينا هذا المحدد يمكنه رؤية اللاعب ، ثم يجب علينا المطاردة ، وإلا يجب

162
00:11:43,990 --> 00:11:49,120
‫علينا التحقيق ويمكننا حذف هذا التسلسل هنا لأن ذلك لم يعد قيد الاستخدام.

163
00:11:49,150 --> 00:11:54,730
‫لذلك نأمل الآن أن يكون لديك فهم أفضل لكيفية ربط أشجار السلوك معًا لإنشاء الاختيار

164
00:11:54,730 --> 00:12:01,690
‫والتسلسل ووضع الكثير من المهام معًا لجعل السلوكيات الأكثر تعقيدًا بسهولة حقًا.

165
00:12:01,690 --> 00:12:08,020
‫في المحاضرة التالية ، سننظر في كيفية إنشاء مهام مخصصة خاصة بنا في C ++ حتى نتمكن من الحصول

166
00:12:08,020 --> 00:12:10,510
‫على بعض إجراءات التصوير.

167
00:12:10,510 --> 00:12:11,980
‫سأراك في الفيديو التالي.

