English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تحقيق لعبة الـ Tetris باستخدام C++ خطوة بخطوة

أولاً: شرح التجربة

1.1 محتويات التجربة

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

1.2 معلومات التجربة

لغة البرمجة C++ الأساسية
ncurses 库的使用
استخدام مكتبة ncurses

تصميم لوجيكي لعبة Tetris

1.3 بيئة التجربة
مستخدم xface
مستخدم g++

مكتبة ncurses

1.4 الفئة المستهدفة

درجة الصعوبة لهذا المقرر متوسطة، يناسب الطلاب الذين لديهم أساسيات البرمجة بلغة C++، ومهتمين بالتصميم اللعبة والتحليل اللوجيكي.

1.5 الحصول على الكود

git clone https://github.com/Gamerchen/game_zero.git

ثانيًا، إعداد التطوير

2.1 تثبيت مكتبة ncurses
sudo apt-get update

sudo apt-get install libncurses5-dev

2.2 تجميع البرنامج

أمر التجميع يجب أن يحتوي على خيار -l لإدخال مكتبة ncurses:

g++ main.c -l ncurses

ثالثًا، مبادئ التجربة

3.1 تحليل التصميم قبل البدء

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

عرض المكعب
تحقيق حركة المكعب
دوران المكعب
إزالة الصفوف المملوءة
إشارة إلى شكل المكعب التالي

3.2 الرسومات الأساسية

كل مكعب يتكون من أربعة boxes، تنحدر من مركز مكعب اللعبة، يمكنها الدوران دون تصادم بالحواف والأكواخ الأخرى داخل الصندوق.


3.3 استخدام مكتبة NCURSES

بشكل بسيط، NCURSES نسخة من CURSES في System V Release 4.0 (SVr4) هي مكتبة قابلة للتكوين بحرية، متوافقة تمامًا مع إصدارات CURSES القديمة، وهي مكتبة تجعل تطبيقاتك تتحكم مباشرة في عرض الشاشة على الترميز. NCURSES تغطي وظائف الترميز الأساسية وتحتوي على بعض الوظائف التي تتيح إنشاء نافذة، وتوسع Menu و Panel و Form لمكتبة CURSES الأساسية، يمكننا بناء تطبيق يحتوي على نافذات متعددة (multiple windows)، قوائم (menus)، لوحات (panels) و formulaires. يمكن إدارة النافذة بشكل مستقل، مثل السماح لها بالتدحرج (scrollability) أو التخفي. القوائم (Menus) تتيح للمستخدم إنشاء خيارات أوامر لسهولة تنفيذ الأوامر. وال formulaires تتيح للمستخدم إنشاء نافذات بسيطة لإدخال وعرض البيانات. اللوحات (Panels) هي توسيع لميزات إدارة النافذة في NCURSES، يمكن استخدامها لتغطية أو تراكم النافذات.

3.3.1 NCURSES--从Hello World程序开始

如果调用 NCURSES 库中的函数,必须在代码中加载 ncurses.h 文件( ncurses.h中已经包含stdio.h )

مثال:

#include <ncurses.h>
int main()
{
 initscr(); // 初始化,进入NCURSES模式
 printw("Hello World!"); // 在虚拟屏幕上打印 Hello Wowrld!
 refresh(); // 将虚拟屏幕上的内容写到显示器上,并刷新
 getch(); // 等待用户输入
 endwin(); // 退出NCURSES模式
 return 0;
}

在以上实例中我们介绍了 NCURSES 库中最基本函数的使用方法,函数的功能已在注释中说明,这里不再赘述。

3.3.2 窗口机制

当 NCURSES 初始化的时候,它会默认创建一个叫做 stdscr 的窗口,大小一般是 80 列,25 行(根据显示器或者显卡的不同,可能会出现不同的大小),除此之外,你还可以通过窗口系统的函数创建你自己的窗口。

举例说明,如果调用以下函数:

printw("Hi!");
refresh();

它会在stdscr上当前光标位置输出 "Hi!", 调用 refresh() 函数,只更新 stdscr 上的缓冲区。

如果你已经建立了一个叫做win的窗口,想要在win窗口上输出内容,可以再普通函数前添加w,同时参数也要发生变化。

printw(string) // 在stdscr的当前光标位置打印字符串string
mvprintw(y,x,string) // 将字符串string打印在坐标(y,x)处
wprintw(win,string) // طباعة السلسلة string في موقع المؤشر الحالي للنافذة win
mvwprintw(win,y,x,string) // تحريك المؤشر إلى موقع النافذة win (y,x) ثم طباعة السلسلة string
بعد قراءة الأمثلة أعلاه، يجب أن تكون قادرًا على رؤية الفرق بين وظائف الدوال من خلال قواعد التسمية

3.3.3 دالة newwin و دالة box

إقامة نافذة تبدأ عبر دالة newwin()، تعود الدالة إلى نقطة إشارة إلى هيكل النافذة، يمكن نقل هذه النقطة إلى بعض الدوال التي تتطلب معامل نافذة مثل wprintw().

على الرغم من أننا أنشأنا نافذة، لا يمكننا رؤيتها، لذا يجب استخدام دالة box() لرسم حواف حول النافذة المحددة بالفعل.

مثال:

WINDOW *create_newin(int height, int width, int starty, int startx)
{
 WINDOW *local_win;
 local_win = newin(height, width, starty, startx);
 box(local_win, 0, 0);
 wrefresh(local_win);
 return local_win;
}

هذا هو نهاية شرح الأساسيات لاستخدام مكتبة NUCRSES، إذا واجهت أي مشاكل في الاستخدام، يجب عليك مراجعة المواد ذات الصلة.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، ملكية المحتوى تخص المالك الأصلي، المحتوى تم تقديمه من قبل مستخدمي الإنترنت بشكل تلقائي، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل أي مسؤولية قانونية. إذا اكتشفت محتوى مخالف للحقوق النشرية، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الأدلة ذات الصلة، إذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.

مفضل لك