Php dasturlash tilida o'yin yaratish: 1-qism
Yaqinda youtubeda eski kompyuterlar haqidagi hujjatli filmni ko'rayotganimda buyruq satri (cli) yordamida yaratilgan o'yinlar e'tiborimni tortdi. Bu matn asosida ishlaydigan yoki savollar berib boradigan emas balkim real vaqtda foydalanuvchi buyruqlarini takrorlovchi o'yin edi.
Demakki o'ttiz yoshli kompyuterda mumkin bo'lsa, unda PHP tili ham bunday ishni eplay olishi aniq!
Ko'pchilik vazifaning og'riqli deb biladigan nuqtasi real vaqt rejimida buyruq satrida klaviaturadan kirishni qanday aniqlashni hal qilishdir. PHP dasturlash tilida php://stdin kiritish oqimi mavjud. Ushbu oqim va fgets()
funksiyasi yordamida biz bemalol foydalanuvchidan kelayotgan kiritish hodisalarini aniqlay olamiz.
// input.php fayli<?php
$stdin = fopen( 'php://stdin', 'r' ); // kiritish oqimini ochishstream_set_blocking( $stdin, 0 ); // oqimni to'xtovsiz o'qish uchun kiritish satriga to'siq o'rnatishsystem( 'stty cbreak -echo' ); // strdan alohida belgilarni o'qishni belgilash
/*** Satrga kiritilgan maxsus belgilarni o'girib olish ***/
function translateKeypress( $string ) {
switch ($string) { // Yuqoriga harakatlantirish tugmasi case "\033[A": return "UP"; // Pastga harakatlantirish tugmasi case "\033[B": return "DOWN"; // O'ngga harakatlantirish tugmasi case "\033[C": return "RIGHT"; // Chapga harakatlantirish tugmasi case "\033[D": return "LEFT"; // ENTER (kiritish) tugmasi case "\n": return "ENTER"; // Bo'sh joy tugmasi case " ": return "SPACE"; // Satrdan belgini o'chirish tugmasi case "\010": case "\177": return "BACKSPACE"; // Tabulator tugmasi case "\t": return "TAB"; // Bekor qilish tugmasi case "\e": return "ESC"; }
return $string;}
// hodisalarni doimiy kuzatish uchun cheksiz siklwhile ( 1 ) { $keypress = fgets( $stdin ); // o'qimni o'qish
// oqimda ma'lumot mavjud bo'lsa maxsus belgilarni o'girish orqali yangi qatorga chop etish if ( $keypress ) { echo translateKeypress( $keypress ) . " -> tugmasi bosildi" . PHP_EOL; }}
Yuqoridagi koddan ko'radigan bo'lsak, kod biz buyrular qatoriga kiritgan har bir kiritish hodisasini o'qib aynan qaysi tugma bosilganini yangi qatorga chop etadi.
$: php input.phpa -> tugmasi bosildid -> tugmasi bosildia -> tugmasi bosildis -> tugmasi bosildid -> tugmasi bosildiTAB -> tugmasi bosildiUP -> tugmasi bosildiDOWN -> tugmasi bosildiRIGHT -> tugmasi bosildiLEFT -> tugmasi bosildiUP -> tugmasi bosildiDOWN -> tugmasi bosildiRIGHT -> tugmasi bosildiLEFT -> tugmasi bosildiTAB -> tugmasi bosildiESC -> tugmasi bosildiESC -> tugmasi bosildi
Demak bizda o'yinni boshqarish uchun muhim qismlardan biri bo'lgan tugmalardan hodisalarni qabul qiluvchi qism tayyor.