كيف قمت بمحاكاة كرة القدم لمدة 13 عامًا

2_fview_gameplay


القصة التي سأرويها بدأت منذ 13 عامًا في درس علوم الكمبيوتر. حللت أنا وأصدقائي في الصف السابع جميع المشاكل في باسكال واستمتعنا بلعب الزلزال الأول. شاهد معلمنا هذا ، جاء إلي وقال عبارة واحدة فقط شوهت صورتي في العالم: "إذا كنت ترغب في ممارسة الألعاب في الدرس ، فاكتبها بنفسك". منذ ذلك الحين وأنا أصنع الألعاب من حين لآخر. واحد منهم هو محاكاة كرة القدم ، والتي سيتم مناقشتها.


هذه قصة مثيرة عن مساري كمطور ومشاريع غير مكتملة ولماذا لا تحتاج أحيانًا إلى إكمالها.


إخلاء المسؤولية: منذ الأحداث الموضحة في هذا النص ، لقد أخذت دورة تطوير Unity ونشرت بعض ألعابي على Google Play ومتجر Windows Store. أنا الآن محرر مدونة Yandex.Money وأخبر هذه القصة لمشاركة التجربة مع المجتمع.


في لعبة تطوير اللغة الروسية في تلك الأوقات كانت هناك ميزة مثيرة للاهتمام - MS DOS على وشك الانتهاء ، وكان المبرمجون المحليون يشاهدون الألعاب بنشاط لنظام التشغيل Windows. ظهر عدد كبير من المحاكاة كرجل كمبيوتر ، ودبابات ، وبطاقات مختلفة وألعاب "منطقية". كما تم بيع الأقراص بهذه الألعاب بكميات كبيرة. حول كيفية تجميع هذه المجموعات ، لم تتم كتابة سوى القليل في "اختبارات المختبر" ، ولكن بعد ذلك لم أكن أعرف عنها بعد.


بالتأكيد يتذكر الكثير منكم هذه القائمة الجميلة:


1250menu
الحياة ، بالطبع ، ربتت عليه


على أحد هذه الأقراص ، التقيت لأول مرة بلعبة مدرب - مدير كرة قدم. هناك يمكنك اصطحاب بعض الفرق من الدوري الإنجليزي ومحاولة إحضارها إلى البطولة. وتم توزيع هذه اللعبة وفقًا لنموذج البرنامج التجريبي: يمكنك لعب موسمين ، ثم الدفع. بالطبع ، لم يكن من الممكن الدفع بأي طريقة ، لأنه كان من الضروري إرسال تحويل مصرفي إلى منشئ اللعبة ، وفي سن الثالثة عشرة ، لن تذهب إلى البنك ، حتى أنك لا تفكر في ذلك. كان Yandex.Money موجودًا بالفعل ، ولكن حتى ظهور Cashier ، بقيت 8 سنوات ، وبالتالي كان الأمر غير مريح أيضًا. لقد لعبت أنا وأصدقائي لمدة موسمين ، ثم بدأنا مرة أخرى.


كان عليّ البحث عن حل ، وفي هذه العملية كتبت إحدى مبارياتي الأولى - Coach ، مع دوري روسي أكثر إثارة للاهتمام بالنسبة لي ، وكوب ومجموعة من الأخطاء. لم أغير الاسم ، لقد غيرت للتو العطاء إلى ثلاثة. اتضح مثل هذا:


مدرب 3 v2.52


ماذا يحتاج أي فريق كرة قدم؟ بالطبع اللاعبين. بطبيعة الحال ، لم يكن أحد يعرف عن أي تراخيص للأندية واللاعبين - لقد اجتمعنا للتو مع زميل في الصف وأعدنا قوائم بالفرق من الذاكرة. لذلك ، على سبيل المثال ، لا يزال كل من CSKA و Spartak يحصلان على 11 شخصًا (نعم ، كانت محاكيًا بدون بدائل) ، لكن Luch-Energia من فلاديفوستوك تركت مع نرد فارغ بدلاً من اللاعبين.


كما أتذكر الآن: 2005 ، سلحت نفسي بكتاب علوم الكمبيوتر للصف 9 (كان الأمر يتعلق بـ Visual Basic 6 المفضلة) وافتتح محرر النماذج - لقد تعلمت كلمة IDE في وقت لاحق. رسم زر في النموذج ، والنقر وفتح محرر التعليمات البرمجية. كتبت فخور بنفسي


Private Sub Command1_Click() End End Sub 

ونقر فوق "تشغيل". كل شيء يعمل وسعدني حقًا. بعد فترة ، ظهرت محاكاة كرة قدم تستند إلى نص - Coach v2.52.


2018-11-01_11-03-44
محامو RPL ، إذا قرأت هذا - لم يتم نشر هذه اللعبة أو بيعها مقابل المال


ثم بدا لي أن هذه هي لؤلؤة كود البرنامج. بالطبع ، في تلك اللحظة لم أكن أعرف الكثير ، على سبيل المثال ، تم تخزين الترتيب في ستة صفائف من Label مباشرة على النموذج. لا حفظ ، لا توجد صفائف متغيرة - مجرد المتشددين. بطبيعة الحال ، ظهرت أخطاء غريبة بسبب هذا:


2018-11-01_11-11-04
لعبت جميع الفرق مباراتين ، بعضها 3 ، وأخرى في وقت واحد


2018-11-01_11-17-52
يمكنك أيضًا شراء Roy Keane و Andriy Shevchenko في Spartak. لست متأكدًا مما كان عليه في محاكاة كرة قدم واحدة على الأقل في ذلك الوقت


بشكل عام ، تخيل أنك نسيت بشدة كيفية استخدام قواعد البيانات ، وكتابة شيء ما إلى الملفات النصية ، وتخزين البيانات في المصفوفات. الشيء الوحيد المتبقي هو الضوابط على النماذج. مخيف وبطريقة ما بدت أيام الأسبوع في الصف السابع وكأنه قرر أنه قادر على اللعب.


لم يكن لدي مصدر هذا الإصدار ، لكني متأكد من وجود شيء مثل هذا:


 m = Form1.Label5(0).Caption Form2.Label3(m).Caption = Form2.Label3(m).Caption + 3 

لم تتم كتابة بعض ميزات VB6 في الكتاب المدرسي. لذلك ، على سبيل المثال ، عندما اكتشفت أنه يمكن سكب الشكل بطرق مختلفة ، قمت بعمل نافذة كاملة لهذا مع اختيار العشب في ملعب النادي:


1_coach_stadium
هل ستكون قادرًا على جز العشب على الناي من أنابيب البث عبر الإنترنت؟


الأخلاق الهامة رقم 1 - اكتشف قوة الأدوات التي تستخدمها كل يوم.

كنت متأكدًا من أنني سأرسل هذه اللعبة يومًا ما إلى نوع من الألعاب المتعددة - ولهذا السبب قمت حتى بكتابة شهادة. بالطبع ، ثم شوهد من قبل اثنين من المختبرين ونصف. ولكن منذ حدوثه ، دعه ينشر.


readme.txt

Coach 3 V2.08 - 2006 Edition




مرحبًا شكرا لك على شراء هذه اللعبة.


1. التثبيت
2. متطلبات النظام
3. منصة الاختبار
4. ما الجديد
5. نصائح
6. التثبيت
7.شكرا جزيلا ...


1. التثبيت
قم بتشغيل Setup.exe وفك ضغط الملفات إلى مجلد يحتوي على: \ Program files \ Football Manager 2005
ثم قم بفك ضغط ملف setup2.exe


2. متطلبات النظام
لا P4-2500. كل شيء بسيط للغاية.


Pentium 1-233 MHz (300 أو أعلى مستحسن)
قرص صلب 5 ميجابايت
16 ميغا بايت من ذاكرة الوصول العشوائي (32 أو أعلى مستحسن)
فيديو 16 ميجا بايت
Windows 9x و Me و NT و 2003 و Longhorn. في XP ، يعمل فقط إذا كان الملف msvbvm60.dll في الدليل الجذر مع: \ windows \ system
الفأر.


3. منصة الاختبار
سيليرون 1100 ميجاهرتز
160 ميجابايت رام
فيديو 16 ميجابايت
نظام التشغيل Windows XP SP2


4. ما الجديد.


صنع الكثير من الأشياء الجديدة.
على سبيل المثال ، الآن في بطولة روسيا ، تشارك فرق 14 (!) بدلاً من 8.
تم تغيير حوار "الفريق" ، وظهرت قائمة حول مدرب النادي.
الآن اللعبة تعتمد على التكتيكات!
منافسين أقوياء.
لأول مرة منذ المدرب 1 ، عادةً ما يتم منح النقاط لك.
دوري ابطال اوروبا كأس السوبر الروسي.


5. نصائح.


لا تقم بتعديل أو حذف الملفات من المجلد باستخدام: \ program files \ football manager 2005 \ club \ emblems
بعد التثبيت ، انسخ ملف MSVBVM60.DLL إلى المجلد c: \ windows \ system


6. التثبيت


لا يلزم إلغاء التثبيت. فقط امسح مجلد اللعبة.


7.شكرا جزيلا ...


Kusherbayev Daniyar لاختبار بيتا.
Karneyev Mikhail ، Trofimenko Mikhail لاختبار بيتا والمشورة القيمة.
ل rfpl.org لشكل فرق الدوري الممتاز.


01/27/06


سوف يفوز PS لنا!


إذا علمت أنني سأعود إلى هذا المشروع على مدى السنوات الـ 13 المقبلة ، فإنني بالطبع سأكون أكثر مسؤولية في الحفاظ على كل ما يتعلق به. ومع ذلك ، بقي Coach 2.5 في التاريخ ويتم إطلاقه حتى الآن ، من المجلد ، والذي يطلق عليه:


 E:\prod\dev\My_old_dev_projects\Dev\ ,  

بالتأكيد كانت هناك إصدارات سابقة ، ولكن لم يكن لدي مكان للنسخ الاحتياطي في ذلك الوقت ، وفقدت المصادر حتى عام 2005 ، إلى جانب إصداراتها السابقة ، عندما تعطل محرك الأقراص الصلبة 2.3 غيغابايت. تتنهد بالحنين وتذكر ، عندما تضع الدم 2 ، كان عليك محو Age of Empires 2؟


0__football_champ_nogame
لقطة شاشة للإصدار 1.62. إذا تم إصدار Windows 10 1803 في عام 2004 ، فلن أكون قد تركت هذا الإجراء


المهم الأخلاقي # 2 - عمل نسخ احتياطية.

حسنًا والأهم من ذلك - اللعب. أحداث عشوائية ، بغض النظر عن أي شيء - هذا ما لفت انتباه ساعات طويلة من التطوير والاختبار. واختبرنا ذلك - لعبنا حتى سقط شيء مضحك.


1_coach_gameplay
لا تسأل ما هي نقاط الهجوم. لا أتذكر


انظر إلى هذا الصندوق الوردي العصبي؟ الآن سأخبرك عنه.


Shinnik ومحاكاة كرة القدم البصرية


مع Coach ، تم توزيع لعبتين أخريين على هذه الأقراص. الأول - "إف سي شينيك" من يفغيني شاروف - كانت إدارة متواضعة للفريق ، ولكن كان بإمكانك مشاهدة المباراة. إذا حكمنا من خلال الاعتمادات ، فقد تم ذلك أيضًا لفترة طويلة جدًا - من عام 1996 إلى عام 2000. وكانت المباراة الثانية هي dosovskiy "كرة القدم 4 × 4" - لم يكن هناك أي شيء مثير للإعجاب على الإطلاق ، باستثناء الرجال الجريين ، لكنني سحرتني كثيرًا لدرجة أنني قررت أن أفعل نفس الشيء لعبة لنفسك.


كرة القدم 4x4

2018-11-01_23-53-44


في البداية ، بسبب قلة الخبرة ، ظهر مربع وردي. انتقل عبر الملعب ، مشيرا إلى أين كانت اللعبة مستمرة. ومثل ، حتى أثرت على شيء. لم يكن هذا كافيًا وقمت بعمل مشروع كرة القدم الثاني في حياتي - Football View.


2_fview_gameplay
نعم ، نعم ، هذه لافتات ملطخة. في العقد الماضي ، كان الأمر أبسط إلى حد ما.


اللغز - كيفية تحريك اللاعبين حول الملعب باستمرار ، عندما لا يمكنك تعليق نص منفصل لكل منهم ، والذي سيأخذ في الاعتبار الموضع والجيران والمسافة إلى الكرة؟ الحل هو استخدام المؤقت ولف اللاعبين في الحلقة ، وتحويلهم بشكل عشوائي إلى عرض النقش المتحرك. الرمز مباشرة من عام 2005 ، لذا أشعر بالخجل الآن.


 Private Sub Igroki_Timer() k = k + 1 ′   For i = 1 To 8 Randomize (x) x = Int(Rnd * 4) If x = 1 Then Image2(i).Top = Image2(i).Top — 360 If x = 2 Then Image2(i).Top = Image2(i).Top + 360 If x = 3 Then Image2(i).Left = Image2(i).Left + 360 If x = 4 Then Image2(i).Left = Image2(i).Left — 360 y = Int(Rnd * 4) If y = 1 Then Image3(i).Top = Image3(i).Top — 360 If y = 2 Then Image3(i).Top = Image3(i).Top + 360 If y = 3 Then Image3(i).Left = Image3(i).Left — 360 If y = 4 Then Image3(i).Left = Image3(i).Left + 360 ′    If Image2(i).Top = Image1.Top And Image2(i).Left = Image1.Left Then Igroki.Enabled = False: pas_vpravo.Enabled = True If Image3(i).Top = Image1.Top And Image3(i).Left = Image1.Left Then Igroki.Enabled = False: pas_vlevo.Enabled = True '        If Image2(i).Top <= 1080 Then Image2(i).Top = Image2(i).Top + 720 If Image3(i).Top <= 1080 Then Image3(i).Top = Image3(i).Top + 720 If Image2(i).Top >= 4320 Then Image2(i).Top = Image2(i).Top — 720 If Image3(i).Top >= 4320 Then Image3(i).Top = Image3(i).Top — 720 ′         If Image2(i).Left <= 480 Then Image2(i).Left = Image2(i).Left + 3720 If Image3(i).Left <= 480 Then Image3(i).Left = Image3(i).Left + 3720 If Image2(i).Left >= 6600 Then Image2(i).Left = Image2(i).Left — 3720 If Image3(i).Left >= 6600 Then Image3(i).Left = Image3(i).Left — 3720 Next i End Sub 

الأخلاق الهامة رقم 3 - كتابة تعليقات واضحة ومفصلة.

تحقق مؤقت آخر من انتهاء المباراة:


 If Val(Label5.Caption) = "90" And Val(Label2.Caption) > Val(Label1.Caption) Then MsgBox (" . " + Label3.Caption): End 

والآن - الأسوأ. تحركت الكرة حول الملعب بأربع مؤقتات ، والتي كانت تسمى pas_vverh و pas_vniz و pas_vpravo و pas_vlevo. البعض الآن لديه ارتعاش في العين ، والبعض الآخر ذهب على وجه السرعة لإعادة قراءة Stroustrup ، ولا يزال البعض الآخر يطرح سؤالًا غبيًا - "لكننا نرى أنه على GIF لا تتحرك الكرة لأعلى ولأسفل." بالطبع ، لأنني لم أستطع تنسيق الموقتات الأربعة بشكل صحيح مع بعضها البعض.


أنا أنظر إلى الرمز الآن وأعي أنه يوفر تحكمًا غير مباشر في الكرة ، ولكنه لا يعمل.


 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode = vbKeyLeft) Then pas_vlevo.Enabled = True If (KeyCode = vbKeyRight) Then pas_vpravo.Enabled = True If (KeyCode = vbKeyUp) Then Pas_verh.Enabled = True If (KeyCode = vbKeyDown) Then Pas_vniz.Enabled = True End Sub 

طوال الصف التاسع والعاشر ، كنت وزملائي منشغلين بكتابة محاكاة لنظام التشغيل ، لذلك لم يكن لدينا أي يد على كرة القدم. فكرت: "نعم ، هذا الدجاج يضحك" ، عندما كنت ما زلت أحفر في عام 2009 ملفًا تنفيذيًا قديمًا ، "أحتاج إلى إعادة كتابة كل شيء من الصفر".


كيف يمكنني إعادة التصنيع غير المصنع


إعادة الكتابة من الصفر فكرة رائعة عندما يكون المشروع صغيرًا ، وظهرت عشرات الطرق في رأسي لجعله أفضل وأكثر راحة مما كان عليه. كنت بحاجة إلى محاكاة مثالية لكرة القدم النصية ، وبالطبع ، كل شيء حدث خطأ مرة أخرى.


في عام 2009 ، أصبح الأمر أسهل مع الإنترنت ، وذهبت إلى موقع الدوري الإنجليزي الممتاز وبدأت أفكر في كيفية التخلص من التشكيلة التي تم تخزينها في هذا النموذج:


3_rpfl_players


لم أكن أعرف كيفية الاستيلاء ، تحليل الصفحة - أيضًا ، لكني كنت أعرف القليل جدًا عن xml و csv. لذلك كان الحل الفني غريبًا جدًا:


  1. نسخ اليدين محتويات الصفحة ولصقها في Excel. احتلت المعلومات لكل لاعب أربعة أسطر ، وفي مكان ما بالقرب من صورة معلقة. لم أستخدمها وأتخلص منها بسهولة.
  2. يجب نسخ جميع الأسطر من Excel إلى الملف النصي parse.txt
  3. تمت كتابة المحلل اللغوي الذي يقرأ الملف سطرًا بسطر ومعلومات متفرقة حول اللاعبين في أربع قوائم - في الموضع الاسمي في الملعب.
  4. تم حفظ جميع هذه القوائم في ملف نصي بتنسيق معين ، والذي أكلته اللعبة بسهولة بعد الإطلاق.

هناك بعض الأماكن المضحكة في كود المحلل اللغوي ، على سبيل المثال ، مثل هذا الخط المعلق. لا أستطيع أن أتخيل لماذا وأين جاء من هناك.


 ' If Val(List1.List(I)) * 0 = 0 Then MsgBox (List1.List(I)) 

في بعض الأحيان تم خنق المحلل اللغوي وبدا الملف مع الأمر كما يلي:


 gk 71  22  81  30  91  16  df 3   2  83  14   96  

هذا أدى إلى أخطاء غريبة داخل اللعبة نفسها.


2018-11-01_13-08-10
كجزء من لاعب خط الوسط Zenith يمكن أن يلعب البرتغال بتصنيف 86.


هذا الإصدار لديه المزيد من إدارة الفريق وأقل متعة. مرة أخرى لم يكن لهذه التكتيكات أي تأثير تقريبًا على أي شيء ، ولكن كان من الممكن شراء وبيع اللاعبين ، فقد أصيبوا واستلموا بطاقات. الحفاظ على الترتيب في النموذج هو شيء من الماضي ، والآن أصبح كل شيء في الذاكرة والعمل معه أصبح أكثر ملاءمة.


كانت هناك مشكلة في عرض مجموعة من الأرقام في النموذج ، ولكن تم حلها بأناقة:


3_rfpl_tablefix
So-so UX


بالطبع ، كان لا يزال هناك قطع في الشفرة لن تنظر إليها بدون دموع:


 For i = 1 To 15 If tbl(i) = team2 Then i = i + 1 k = k + 1 If k = 1 Then tr = Int(Rnd * 5) + 2: xa = Int(Rnd * tr): ia = i If k = 2 Then xb = Int(Rnd * tr) If xa > xb Then pts(ia) = pts(ia) + 3: gm(2, ia) = gm(2, ia) + 1: gm(4, i) = gm(4, i) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa If xa < xb Then pts(i) = pts(i) + 3: gm(2, i) = gm(2, i) + 1: gm(4, ia) = gm(4, ia) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa If xa = xb Then pts(i) = pts(i) + 1: pts(ia) = pts(ia) + 1: gm(3, i) = gm(3, i) + 1: gm(3, ia) = gm(3, ia) + 1: gm(5, ia) = gm(5, ia) + xa: gm(5, i) = gm(5, i) + xb: gm(6, ia) = gm(6, ia) + xb: gm(6, i) = gm(6, i) + xa Form6.List1(ng).AddItem tbl(ia) + Str(xa) + «:» + Str(xb) + " " + tbl(i) k = 0 End If 

كانت هذه اللعبة مثالية تقريبًا - كان من الممكن شراء Igor Akinfeev بشكل قانوني كمهاجم في Amkar ، ثم انظر كيف أصبحت Nizhny Novgorod Volga بطلة لروسيا. وبشكل عام ، أصبح كل شيء أكثر لائقة - حسنًا ، اعتقدت ذلك في البداية. بعد أربع سنوات ، لم يكن كل شيء ورديًا.


RFPL 2 - القيامة


بحلول عام 2013 ، تمكنت بالفعل من العمل كمبرمج من أجل المال. فكرت وأردت كتابة نسخة جديدة من المحاكي - أظهر نظرة جديدة على الرمز القديم أنه لا يوجد شيء جيد على الإطلاق. حسنا ، هذا لا شيء على الإطلاق.


الأخلاق المهمة رقم 4 - من الأفضل أحيانًا إعادة الكتابة من البداية.

كان موقع RFPL قد تغير بحلول ذلك الوقت ، لذا كتبت محللاً آخر (غرق رمزه في غياهب النسيان) ، ولكن الآن لم تعد هناك أخطاء مزعجة في البلد. لقد أنشأت بنية منفصلة للاعبين ، حيث أشرت ، من بين أمور أخرى ، إلى الانتماء إلى النادي - وهذا جعل من السهل تنفيذ الانتقالات والاحتفاظ بالإحصاءات. وحصلوا جميعًا على نقاط ، اعتمادًا على "النجومية" والموقف على أرض الملعب.


 Type player Surname As String FirstName As String Num As String Team As String Goals As Integer Shots As Integer Saves As Integer AttPts As Integer DefPts As Integer MidPts As Integer GoalPts As Integer Position As String Star As Boolean Stamina As Integer Yellow As Integer TeamPts As Integer Injured As Integer fromStart As Boolean fromBench As Boolean End Type 

2018-11-01_13-30-49
ظهر الزر "Autocomposition" للاعبين الكسلين بشكل خاص - فقد ملأ المناصب بأقوى "لاعبي كرة القدم". لسوء الحظ ، أنا فقط ما زلت ألعب هذا


وبحلول ذلك الوقت ، اكتشفت الجدول أيضًا - لم أكن كسولًا جدًا وأعدت جدولًا "كلاسيكيًا" مفهوما مع المؤشرات الضرورية ، والتي يمكن رؤيتها على الفور. إلى جانب ذلك ، ظهرت الإحصائيات في قائمة الهدافين.


2018-11-01_13-34-53


تم إضافة التصفيات ، وتحويلات أفضل ، ونتائج المباريات الموازية لكل جولة. الآن أنظر إليها وأتفهم أن هذا كله طفولي للغاية وساذج ، ولكن بعد ذلك بدا مثيرًا للإعجاب. كل شيء ما عدا شيء واحد. انظر:


4_rfpl2_gameplay
مخجل. الكرة. بدلاً من ذلك. وردي. مربع.


الأخلاق المهمة رقم 5 - من الأفضل في بعض الأحيان عدم فعل أي شيء بدلاً من إنشاء مربع وردي.

مرت بضع سنوات أخرى وقررت تعليم الكمبيوتر كيفية لعب كرة القدم. أو على الأقل يتظاهر بأنه يلعب كرة القدم. بالكرة ، اللاعبون في الميدان ، بدون نص وقوائم. وهنا مكان أخلاقي مهم آخر يتزامن مع عنوان القسم:


إذا لم تقم بعمل نسخ احتياطية ، فلن يكون لديك ما تتحدث عنه في هذا القسم.


من مشروع كبير عن الوحدة من عام 2016 ، حيث كانت هناك نماذج جيدة لحركة الوكيل واللعب الموضعي وحركة الكرة الذكية تقريبًا ، كان هناك ملف GIF صغير من إحدى المراحل الأولى من التطوير.


ezgif-2-358042221c7d


لذلك ، سأخبرك عن هذا في وقت آخر ، عندما سأعيد كتابة كل شيء من الصفر مرة أخرى.


ما كل هذا؟


أحب أن أتذكر هذه القصة منذ البداية. أحب أن أعتقد أن لعبة "المحاكاة" هذه جلبت تجربة ومتعة أكثر من بعض الفصول الجامعية ومهام العمل. تذكر كيف سجلت البريد الأول ، والذي سيرسل إليه اللاعبون بالامتنان ، وكيف كتبت في عام 2007 في منتدى المدينة "قراءة الكتب المدرسية على الإنترنت هي الغش ، وسوف أتعلم كل شيء عن طريق الكتابة". هذه أحاسيس رائعة ، ربما لديك في أشكال مختلفة.


كان هناك الكثير من النصائح الواضحة في هذا المنشور - حول النسخ الاحتياطية والتعليقات والحاجة إلى إعادة الهيكلة - يعرف الجميع هذا بدوني. والأهم من ذلك ، تأكد من تذكر فكرة Lyubov Nikolaevna Kaftunkina ، أستاذ علوم الكمبيوتر:


"إذا كنت ترغب في ممارسة الألعاب في الدرس ، فاكتبها بنفسك".

Source: https://habr.com/ru/post/ar428495/


All Articles