1. அறிமுகம்

ஒரு கேம் இன்ஜின் திரையில் எதையாவது வரைய மட்டுமே பயன்படுத்தினால் அது சிறிதும் பயன்படாது. ஒரு முழு அளவிலான கேமை எழுத, பயனருடன் தொடர்பு கொள்ள இது தேவை! இன்னும் துல்லியமாகச் சொல்வதானால், எங்கள் நிரல் பயனர் செயல்களைக் கண்காணித்து அவர்களுக்குப் பதிலளிக்க வேண்டும்.

இதைச் செய்ய, கோட்ஜிம் கேம் இன்ஜின் சிறப்பு முறைகளைக் கொண்டுள்ளது, இது பயனர் சுட்டி பொத்தான்கள் அல்லது விசைப்பலகை விசைகளைக் கிளிக் செய்யும் போது அழைக்கிறது.

வகுப்பின் புள்ளி என்னவென்றால், இந்த முறைகளை நீங்களே எழுதுகிறீர்கள், பின்னர் அவற்றை அழைப்பதற்கு CodeGym விளையாட்டு இயந்திரம் பொறுப்பாகும். உங்கள் குறியீட்டில் இந்த முறைகளை அறிவிக்க வேண்டும். ஒலிப்பதை விட இதைச் செய்வது எளிது.


2. சுட்டியுடன் வேலை செய்தல்

விளையாட்டு இயந்திரம் சுட்டியுடன் வேலை செய்ய இரண்டு முறைகளைக் கொண்டுள்ளது:

void onMouseLeftClick(int x, int y)
void onMouseRightClick(int x, int y)

இந்த முறைகளை உங்கள் சொந்த வகுப்பில் அறிவிக்கிறீர்கள், அது அந்த Gameவகுப்பைப் பெறுகிறது. இந்த முறைகளில் நீங்கள் விரும்பும் குறியீட்டை எழுதவும். பயனர் சுட்டி பொத்தான்களைக் கிளிக் செய்யும் போது விளையாட்டு இயந்திரம் இந்த முறைகளை அழைக்கும்.

onMouseLeftClick(int x, int y)இடது சுட்டி பொத்தானைக் கிளிக் செய்யும் போது இயந்திரத்தால் அழைக்கப்படுகிறது . அதன் அளவுருக்கள் கிளிக் நிகழ்ந்த ஆடுகளத்தின் கலத்தின் ஆயத்தொலைவுகள் ஆகும். மேல் இடது கலத்தின் ஆயத்தொலைவுகள் (0,0). இந்த முறையைப் பயன்படுத்த, நீங்கள் அதை மேலெழுத வேண்டும், @Overrideமுறையின் பெயருக்கு முன் சிறுகுறிப்பை வைக்க வேண்டும்.

onMouseRightClick(int x, int y)வலது சுட்டி பொத்தானை சொடுக்கும் போது அழைக்கப்படுகிறது . இது முறையைப் போலவே செயல்படுகிறது onMouseLeftClick(int x, int y).

இந்த முறைகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
   @Override
   public void initialize() {
      // Set the size of the playing field to 3x3
      setScreenSize(3, 3);

      // Paint the playing field white
      for (int x = 0; x < 3; x++) {
         for (int y = 0; y < 3; y++) {
            setCellColor(x, y, Color.WHITE);
         }
      }
   }

   @Override
   public void onMouseLeftClick(int x, int y) {
      // Put a "X" in the cell that was clicked with the left mouse button
      setCellValue(x, y, "X");
   }

   @Override
   public void onMouseRightClick(int x, int y) {
      // Clear the cell that was clicked with the right mouse button
      setCellValue(x, y, "");
   }
}

மேலே உள்ள எடுத்துக்காட்டில், நாங்கள் இரண்டு முறைகளையும் அறிவித்தோம்: onMouseLeftClick()மற்றும் onMouseRightClick(). பயனர் ஆடுகளத்தின் கலங்களில் இடது சுட்டி பொத்தானைக் கிளிக் செய்யும் போது முதல் முறை அழைக்கப்படுகிறது. வலது சுட்டி பொத்தானைக் கிளிக் செய்யும் போது இரண்டாவது முறை அழைக்கப்படும்.

வாதங்களாக, கோட்ஜிம் கேம் எஞ்சின் (x, y)மவுஸ் கிளிக் செய்யப்பட்ட ஆடுகளத்தின் கலத்தின் ஆயங்களை கடந்து செல்லும்.



3. விசைப்பலகையுடன் வேலை செய்தல்

விசைப்பலகையுடன் வேலை செய்ய விளையாட்டு இயந்திரம் இரண்டு முறைகளைக் கொண்டுள்ளது:

void onKeyPress(Key key);
void onKeyReleased(Key key);

பயனர் ஒரு விசையை அழுத்தும் போது நீங்கள் ஏதாவது செய்ய விரும்பினால், வகுப்பை மரபுரிமையாகப் பெறும் இந்த முறைகளை உங்கள் வகுப்பில் அறிவிக்க வேண்டும் Game.

இந்த முறைகளில் உங்கள் குறியீட்டை எழுதுகிறீர்கள், மேலும் பயனர் ஒரு விசையை அழுத்தும்போது (அல்லது வெளியிடும்போது) கேம் என்ஜின் அவர்களை அழைக்கும்.

onKeyPress(Key key)எந்த விசையையும் அழுத்தும் போது அழைக்கப்படுகிறது . அழுத்தப்பட்ட விசையின் மதிப்பு (அல்லது ) அளவுருவாக முறைக்கு அனுப்பப்படுகிறது . இந்த முறையைப் பயன்படுத்த, நீங்கள் அதை மேலெழுத வேண்டும், முறையின் பெயருக்கு முன் சிறுகுறிப்பை வைக்க வேண்டும்.Key.UNKNOWNkey@Override

onKeyReleased(Key key)எந்த விசையும் வெளியிடப்படும் போது அழைக்கப்படுகிறது . தொடர்புடைய விசையின் மதிப்பு (அல்லது ) அளவுருவுக்கு ஒதுக்கப்படும் . இந்த முறையைப் பயன்படுத்த, நீங்கள் அதை மேலெழுத வேண்டும், முறையின் பெயருக்கு முன் சிறுகுறிப்பை வைக்க வேண்டும்.Key.UNKNOWNkey@Override

இந்த முறைகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டுகள்:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
   @Override
   public void initialize() {
      // Set the size of the playing field to 3x3
      setScreenSize(3, 3);

      // Paint the playing field white
      for (int x = 0; x < 3; x++) {
         for (int y = 0; y < 3; y++) {
            setCellColor(x, y, Color.WHITE);
         }
      }
   }

   @Override
   public void onKeyPress(Key key) {
      // When the spacebar is pressed, the center cell turns yellow
      if (key == Key.SPACE) {
         setCellColor(1, 1, Color.YELLOW);
      }
   }

   @Override
   public void onKeyReleased(Key key) {
      // When the spacebar is released, the center cell returns to white
      if (key == Key.SPACE) {
         setCellColor(1, 1, Color.WHITE);
      }
   }
}


4. ஆதரிக்கப்படும் அனைத்து விசைகளின் பட்டியல்

CodeGym இயந்திரம் onKeyPress()மற்றும் onKeyReleased()முறைகளை அழைக்கும் போது, ​​அழுத்தப்பட்ட (வெளியிடப்பட்ட) விசையைப் பற்றிய தகவலை அவர்களுக்கு அனுப்புகிறது. இதைச் செய்ய, CodeGym இன்ஜின் எனப்படும் சிறப்பு வகை உள்ளது Key.

இயந்திரத்தின் தற்போதைய பதிப்பில், Keyவகை 9 மதிப்புகளின் வரையறுக்கப்பட்ட தொகுப்பை மட்டுமே ஆதரிக்கிறது:

மதிப்பு பயனர் என்ன அழுத்தினார்
Key.ENTER
பயனர் Enter விசையை அழுத்தினார்
Key.ESCAPE
பயனர் Esc விசையை அழுத்தினார்
Key.PAUSE
பயனர் இடைநிறுத்த விசையை அழுத்தினார்
Key.SPACE
பயனர் ஸ்பேஸ் விசையை அழுத்தினார்
Key.LEFT
பயனர் இடது அம்புக்குறியை அழுத்தினார்
Key.RIGHT
பயனர் வலது அம்பு விசையை அழுத்தினார்
Key.UP
பயனர் மேல் அம்பு விசையை அழுத்தினார்
Key.DOWN
பயனர் கீழ் அம்பு விசையை அழுத்தினார்
Key.UNKNOWN
மேலே பட்டியலிடப்பட்டுள்ளதைத் தவிர வேறு எந்த விசையும்

பிளேயர் ஸ்பேஸ் பாரை அழுத்தினால், அந்த முறை அளவுருவாக onKeyPress()அழைக்கப்படும் . Key.SPACEபயனர் இடது அம்புக்குறியை அழுத்தினால், அளவுருவாக இருக்கும் Key.LEFT. மேலே உள்ள பட்டியலில் இல்லாத எந்த விசையையும் பயனர் அழுத்தினால், அந்த முறை அளவுருவாக onKeyPress()அழைக்கப்படும் .Key.UNKNOWN

இங்குள்ள பிரச்சினை என்னவென்றால், தற்போதுள்ள CodeGym கேம்கள் தொலைபேசியில் இயங்கும் வகையில் வடிவமைக்கப்பட்டுள்ளன. நிலையான விசைப்பலகைக்கு பதிலாக, எங்களிடம் 8 மெய்நிகர் பொத்தான்கள் உள்ளன:


5. டைமருடன் வேலை செய்தல்

பல கேம்கள் நிகழ்நேரத்தில் நடைபெறுகின்றன, அதாவது பயனர் எதுவும் செய்யாமல் இருக்கலாம், ஆனால் சில நிகழ்வுகள் இன்னும் விளையாட்டில் நிகழும். இதுபோன்ற கேம்களைச் செயல்படுத்த உங்களை அனுமதிக்க, கேம் இன்ஜினில் டைமரைச் சேர்த்துள்ளோம்.

இது எவ்வாறு செயல்படுகிறது என்பது இங்கே: நீங்கள் டைமரை இயக்கி, அது தூண்டப்பட வேண்டிய நேரத்தை அமைக்கவும். உதாரணமாக, 500 எம்.எஸ். பிறகு, ஒவ்வொரு அரை வினாடியும், CodeGym கேம் என்ஜின் முறையை அழைக்கும் onTurn(). எண்ணற்ற முறை - டைமர் அணைக்கப்படும் வரை.

டைமரை எப்படிப் பயன்படுத்துகிறீர்கள்?

1. டைமரை இயக்கவும்

டைமரை இயக்க, எங்களிடம் void setTurnTimer(int timeMs)முறை உள்ளது. முறையானது கால்பேக்குகளுக்கு இடையிலான இடைவெளியின் கால அளவை (மில்லி விநாடிகளில் அல்லது ஒரு வினாடியின் 1/1000 வினாடிகளில்) ஒரு வாதமாக எடுத்துக்கொள்கிறது. இந்த முறையை நீங்கள் ஒருமுறை அழைக்க வேண்டும், மேலும் கேம் என்ஜின் onTurn()ஒவ்வொரு timeMsமில்லி விநாடிகளிலும் இந்த முறையை அழைக்கத் தொடங்கும்.

2. onTurn(int)முறையை மேலெழுதவும்

இதைச் செய்ய, void onTurn(int step)வகுப்பை மரபுரிமையாகக் கொண்ட வகுப்பில் ஒரு முறையை நீங்கள் அறிவிக்க வேண்டும் Game. விளையாட்டு இயந்திரம் இந்த முறையை அழைக்கும். 1ஒவ்வொரு அழைப்பிலும், முறை அழைப்பை ( , 2, 3, ...) அடையாளம் காணும் ஒரு வரிசை எண்ணை இயந்திரம் கடந்து செல்கிறது .

3. டைமரை அணைக்கவும்

டைமர் இனி தேவையில்லை என்றால், எடுத்துக்காட்டாக, பயனர் விளையாட்டை முடித்துவிட்டதால், அதை முடக்கலாம். இதைச் செய்ய, முறையை அழைக்கவும் stopTurnTimer().

4 டைமரை முடுக்கி/மாற்று

சில விளையாட்டுகளில், நிகழ்வுகளின் அதிர்வெண் தொடர்ந்து அதிகரிக்கிறது, எனவே எங்கள் டைமரை விரைவுபடுத்துவது வசதியாக இருக்கும், அதாவது கால்பேக்குகளுக்கு இடையிலான நேரத்தைக் குறைக்கலாம். எதுவும் எளிதாக இருக்க முடியாது - setTurnTimer(int timeMs)புதிய மதிப்புடன் மீண்டும் அழைக்கவும், அழைப்புகளுக்கு இடையேயான நேரம் onTurn()மாறும்.

உதாரணமாக:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
   ...
   @Override
   public void initialize() {
      // Create a 3x3 playing field
      setScreenSize(3, 3);
      showGrid(false);
      setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

      setTurnTimer(500); // Turn on the timer. The interval between callbacks is 500ms.
   }

   @Override
   public void onTurn(int step) {
      if (step == 100) {
         stopTurnTimer(); // If this is the 100th callback, then turn off the timer
      }

      if (step % 2 == 1) {
         // If this is an odd calllback, then set the cell background to red
         setCellColor(1, 1, Color.RED);
      } else {
         // If this is an even callback, then set the cell background to blue
         setCellColor(1, 1, Color.BLUE);
      }
   }
   ...
}

இந்த எளிய எடுத்துக்காட்டில், 3 செல்கள் 3 செல்கள் என்று ஒரு புலத்தை உருவாக்கினோம். onTurn()ஒவ்வொரு அரை வினாடிக்கும் முறையை அழைக்கும் டைமரை இயக்கினோம் .

இங்கு, ஒவ்வொரு அரை வினாடிக்கும் மத்திய கலத்தின் நிறம் மாறும். கலத்தின் உரை மாறாது. 50 வினாடிகளுக்குப் பிறகு (100 கால்பேக்குகள்), நிறம் மாறுவதை நிறுத்தி, டைமர் அணைக்கப்படும்.