C++vector 용기 탐식 뱀 미니 게임 실현

6571 단어 C++vector탐식 사
본 논문 의 사례 는 C+vector 용기 가 뱀 을 게 걸 스 럽 게 먹 는 것 을 실현 하 는 것 을 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같다.
vector 용 기 를 사용 하여 탐식 뱀 을 실현 하여 많은 번 거 로 운 조작 을 간소화 하 였 으 며,이전 나의 코드 에 비해 가능 한 한 간결 하 게 하 였 다.
기술 부분:
컴 파일 환경:windows VS 2019
필요:
뱀 이 음식 을 즐겨 먹 는 것 을 억제 하고 한 음식 을 먹 으 면 뱀 몸 이 한 마디 길 어 지고 득점 이 증가 하 며 벽 에 부 딪 히 거나 자신 에 게 부 딪 히 면 게임 이 끝난다.
생각:
vector 용 기 를 만 듭 니 다.용기 에 뱀 을 저장 하 는 모든 신체 의 구조 변 수 를 만 듭 니 다.구조 변 수 는 뱀 몸의 xy 좌 표를 저장 합 니 다.vector 구성원 방법 으로 용기 에 있 는 데 이 터 를 계속 추가 하고 삭제 하여 뱀 좌표 의 규칙 적 인 이동 을 실현 하고 음식 을 먹 을 때 대응 하 는 작업 을 수행 합 니 다.
코드 주석 에 모든 단계 가 어떻게 이 루어 졌 는 지 표시 되 어 있 습 니 다.
주의:
컴 파 일 러 때문에 프로그램 중kbhit()와getch()함 수 는 다른 컴 파일 러 에서 컴 파일 하 는 데 오류 가 발생 할 수 있 습 니 다.해결 방법 은 함수 앞의''를 제거 하 는 것 입 니 다.
실행 효과:

#include <iostream>
#include <vector>
#include <windows.h>
#include <conio.h>
#include <ctime>

using namespace std;


void gotoxy(int x, int y); //    

//   
class Food
{
private:
 int m_x;
 int m_y;
public:
 void randfood() //        
 {
 srand((int)time(NULL));
 L1:
 m_x = rand() % (85) + 2;
 m_y = rand() % (25) + 2;

 if (m_x % 2) //     x                
 goto L1;

 gotoxy(m_x, m_y); //           
 cout << "★";
 }
 int getFoodm_x() //     x  
 {
 return m_x;
 }
 int getFoodm_y() //     y  
 {
 return m_y;
 }
};

//  
class Snake
{
private:
 //     
 struct Snakecoor
 {
 int x;
 int y;
 };
 //   
 vector<Snakecoor> snakecoor;


 //         
 void degdir(Snakecoor& nexthead) //  :       、     
 {
 static char key = 'd'; //                  

 if (_kbhit()) //        
 {
 char temp = _getch();

 switch (temp) //         wasd    ,    key
 {
 default:
 break;
 case 'w':
 case 'a':
 case 's':
 case 'd':
 //  temp    key         
 if ((key == 'w' && temp != 's') || (key == 's' && temp != 'w') || \
 (key == 'a' && temp != 'd') || (key == 'd' && temp != 'a'))
 key = temp;
 }
 }


 switch (key) //  key          
 {
 case 'd':
 nexthead.x = snakecoor.front().x + 2; //                 (   )x  +2
 nexthead.y = snakecoor.front().y;
 break;
 case 'a':
 nexthead.x = snakecoor.front().x - 2;
 nexthead.y = snakecoor.front().y;
 break;
 case 'w':
 nexthead.x = snakecoor.front().x;
 nexthead.y = snakecoor.front().y - 1;
 break;
 case 's':
 nexthead.x = snakecoor.front().x;
 nexthead.y = snakecoor.front().y + 1;
 }

 }

 //           
 void finmatt(const int score)
 {
 system("cls");
 gotoxy(40, 14);
 cout << "    ";
 gotoxy(40, 16);
 cout << "  :" << score;
 gotoxy(0, 26);
 exit(0);
 }

 //       
 void finishgame(const int score)
 {
 //    
 if (snakecoor[0].x >= 88 || snakecoor[0].x < 0 || snakecoor[0].y >= 28 || snakecoor[0].y < 0)
 finmatt(score);

 //      
 for (int i = 1; i < snakecoor.size(); i++)
 if (snakecoor[0].x == snakecoor[i].x && snakecoor[0].y == snakecoor[i].y)
 finmatt(score);
 }
public:
 //         
 Snake()
 {
 Snakecoor temp; //           

 for (int i = 5; i >= 0; i--) //        ,      
 {
 temp.x = 16 + (i << 1); //  
 temp.y = 8;
 snakecoor.push_back(temp);
 }

 }

 //       
 void move(Food& food, int& score)
 {
 Snakecoor nexthead; //     

 degdir(nexthead); //           

 snakecoor.insert(snakecoor.begin(), nexthead); //           

 gotoxy(0, 0);
 cout << "  :" << score; //             

 finishgame(score); //        

 if (snakecoor[0].x == food.getFoodm_x() && snakecoor[0].y == food.getFoodm_y()) //       
 {
 gotoxy(snakecoor[0].x, snakecoor[0].y); //                     ,       
 cout << "●"; //                  
 gotoxy(snakecoor[1].x, snakecoor[1].y);
 cout << "■";

 score++; //      +1

 food.randfood(); //                      
 return; //        
 }

 for (int i = 0; i < snakecoor.size(); i++) //    ,                 
 {
 gotoxy(snakecoor[i].x, snakecoor[i].y);

 if (!i) //            
 cout << "●";
 else
 cout << "■";

 //           ,         
 if (snakecoor[i].x == food.getFoodm_x() && snakecoor[i].y == food.getFoodm_y())
 food.randfood();
 }

 gotoxy(snakecoor.back().x, snakecoor.back().y); //            
 cout << " ";
 snakecoor.pop_back(); //           
 }

};


void HideCursor() //    
{
 CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

void gotoxy(int x, int y) //    
{
 COORD pos = { x,y };
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

//   
int main()
{
 system("mode con cols=88 lines=28"); //         
 system("title C++    ");  //    
 HideCursor();  //    

 int score = 0; //    

 Food food; //    
 food.randfood(); //          

 Snake snake; //   


 while (true)
 {
 snake.move(food, score);//   

 Sleep(150); //    
 }

 return 0;
}
부족 한 점:
C++를 처음 배 웠 기 때문에 프로그램 에 규범 에 맞지 않 거나 불합리한 부분 이 있 을 것 이다.
C++미니 게임 에 대한 더 많은 하 이 라이트 내용 은 주 제 를 클릭 하 십시오<C++클래식 미니 게임>학습 이해
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기