تتريس با++ C و تابع kbhit

سلام.بازي تتريس را كه مي شناسيد.مي خواهم بدانم قسمتي را كه در آن خط افقي پر شده از بين مي رود چگونه نوشته مي شود؟
ضمنا از تابع kbhit دقيقا چگونه استفاده كنم؟
 

a_mollaei

Member
سلام.
براي اين كار يه آرايه در نظر مي گيريد مثلا بيست در هشت.
براي هر خونه خالي صفر و هر خونه پر هم يك در نظر مي گيريد.
خوب فقط كافيه ببينيد توي كدوم سطر تمام خونه ها يك هست. و اونو حذف كنيد.

تابع kbhit موقعي كه كاربر يك كليد رو فشار مي ده مقدار كليد رو بر مي گردونه.
شما با استفاده از اين تابه مي تونيد يه چيزي مثل screen saver بنويسيد. يعني كدي كه تا موقعي كه كاربر كليدي رو فشار نداده تكرار بشه.

اگه كدتونو بعد از دستور while(!kbhit()) بذاريد تا زماني كه كاربر كليدي رو فشار نداده تكرار مي شه.
 
خوب تا اين جا را فهميدم.اما صفر يا يك شدن خانه هاي آرايه را چگونه به چاپ شدن اشكال در صفحه نمايش ارتباط دهم؟
 

a_mollaei

Member
خوب اين خيلي ساده است.
شما مي توني يه آبجكت تعريف كني كه اين كارو برات بكنه.
اگر هم برنامه نويسي شي گرا نمي خواي انجام بدي. مي توني با يك تابع بسيار ساده اين كارو بكني. يعني صفحه رو به تعداد خونه هاي مورد نظرت تقسيم كني و هر بار توي آرايه جستجو كني و به ازاي هر خونه 1 يكي از خونه هاي صفحه رو رنگ كني.
 

a_mollaei

Member
با سلام دوباره.

اجازه بديد به صورت كاملا ساده و بدون استفاده از OOP الگوريتم رو براتون بگم.

بعد اگه خواستيد با استفاده از OOP هم براتون توضيح مي دم.

شما يه ماتريس براي كل صفحه تون در نظر مي گيريد مثلا يه ماتريس با 20سطر و 30 ستون.
بعد يه ماتريس كوچك براي هر شكل در نظر مي گيريد. مثلا يك ماتريس با 5سطر و 5 ستون.
بعد يه تابع مي نويسيد كه به طور رندوم به ماتريستون شكل بده يعني جاهايي كه بايد رنگ داشته باشه رو 1 و بقيه جاها رو 0 بذاره. مثل اين:

کد:
11000
11000
11000
11000
11111
11111

شما مي تونيد چند تا شكل رو طراحي كنيد و به صورت تصادفي يكي از اونا رو براي شكل جاري در نظر بگيريد.

بعد ماتريستون رو به دو صورت مي تونيد در صفحه حركت بديد. اگه از مد گرافيكي استفاده نمي كنيد از يه window استفاده كنيد كه هر بار با فشار يه كليد توسط كاربر x,y اون تغيير مي كنه.

اگر هم از مد گرافيكي استفاده مي كنيد مي تونيد هر دفعه صفحه رو refresh كنيد.

براي برخورد شكل با اشكال پايين صفحه هم شما بايد در هر step پايين ترين 1 ماتريستون رو با ماتريس كل صفحه چك كنيد. يعني فرض كنيد ماتريس شما جزپي از ماتريس كل هست و چك كنيد ببينيد آيا زير ماتريستون 1 وجود داره يا نه اگه بود بريد سطر پر رو در ماتريس كل (همونطور كه بالا توضيح دادم.) چك كنيد و كارهاي مربوط به اونو انجام بديد (كه مي تونه با يه تابع انجام بشه) بعد شكل بعدتون رو با تابع بالا صدا كنيد.

به همين ترتيب پيش مي ريد تا صفحه تون پر بشه.

در حقيقت شما توي پس زمينه (كدتون) بايد بتونيد يه ماتريس رو توي يه ماتريس ديگه حركت بديد.

و در هر لحظه ماتريس نهايي رو چاپ كنيد.


کد:
..............................
..............000...........
.................0...........
.................0...........
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............0000.........
.0.000000....00........


..............................
..............................
..............................
..............................
..............................
..............000...........
.................0...........
.................0...........
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............0000.........
.0.000000....00........


..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............000...........
.................0...........
.................0...........
..............................
..............................
..............................
..............................
..............0000.........
.0.000000....00........


..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............000...........
.................0...........
.................0...........
..............0000.........
.0.000000....00........

من براي سادگي و ديد بهتر به جاي صفر از . و به جاي 1 از o استفاده كردم.

اميدوارم تونسته باشم كمكي كرده باشم.
 

جدیدترین ارسال ها

بالا