C++코드 탐식 뱀 게임 실현

8406 단어 C++탐식 사
본 논문 의 사례 는 C++뱀 을 게 걸 스 럽 게 먹 는 게임 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1.게임 설명
뱀 을 게 걸 스 럽 게 먹 는 것 은 어 릴 때 부터 큰 재 미 를 가 진 작은 게임 이 라 고 할 수 있다.뱀 은 음식 을 한 번 먹 을 때마다 몸 이 한 마디 씩 자라 고 벽 에 부 딪 히 거나 자신 에 게 부 딪 히 면 게임 이 끝난다.
2.코드 구현
1.우선 생각해 야 할 문 제 는 위치 출력 문 자 를 어떻게 지정 하 는가?이때 아주 강력 한 함수 인 gotoxy()가 있 습 니 다.현재 라 이브 러 리 함수 에는 이미 없습니다.우리 만 실현 할 수 있 습 니 다.코드 에 주석 이 완전 하고 스스로 읽 으 면 됩 니 다.
2.어떤 그림 을 그 리 는 지 목 표를 달성 하면 게임 콘 텐 츠 제작 을 시작 할 수 있 습 니 다.우선 땅 을 그 리 는 것,즉 지 도 를 그 리 는 것 이다.간단 한 순환 만으로 도 명명백백 하 게 배정 할 수 있다.
3.위대 한 동그라미 운동 이 끝 났 습 니 다.그 다음 에 우 리 는 뱀 한 마 리 를 그 리 는 것 을 실현 합 니 다.우 리 는 deque 쌍 단 대열 을 사용 하 는 것 을 선택 하 였 습 니 다.이 조작 이 더욱 편리 합 니 다.뱀 을 그린 후에 음식 을 그 려 주 었 습 니 다.음식의 위치 좌 표 는 무 작위 숫자 로 이 루어 집 니 다.간단 하 죠~
4.뱀 을 움 직 이게 한다.우 리 는 기본적으로 뱀 을 위로 가게 한다.즉,'w'방향 이다.그 다음 에 버튼 이 호응 한다.이것 은 문법 을 조금 만 알 면 소 백 이 모두 실현 할 수 있 기 때문에 더 이상 말 하지 않 는 다.
5.뱀 을 탐식 하 는 기본 틀 을 이렇게 만 들 었 습 니 다.soeasy 아 닙 니까?
3.장식 고리
다만 달 릴 수 있 을 뿐 우리 가 날로 증가 하 는 정신 적 수 요 를 만족 시 킬 수 없다.그러면 재 료 를 넣 어 라.아래 의 코드 에는 점수,등급 만 넣 었 고 다른 것 은 넣 지 않 았 다.초보 자 들 이 빨리 손 에 넣 을 수 있 기 위해 서 이다.너 도 음식 을 먹 을 때'방울~'소 리 를 내 는 등 요 소 를 넣 을 수 있다.이것 은 문제 가 되 지 않 는 다.

말 이 많 지 않 으 니 코드 를 달 아 라!

#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <deque>
#include <ctime>
#pragma warning(disable:4996)
using namespace std;
HANDLE hOut;
COORD pos;

//1.  gotoxy  
void gotoxy(short x, short y)
{
 hOut = GetStdHandle(STD_OUTPUT_HANDLE); //    
 pos = { x, y };
 SetConsoleCursorPosition(hOut, pos);  //         
}
void HideCursor() //    
{
 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
 CONSOLE_CURSOR_INFO CursorInfo;
 GetConsoleCursorInfo(handle, &CursorInfo);//         
 CursorInfo.bVisible = false;    //       
 SetConsoleCursorInfo(handle, &CursorInfo);//         
}

//2.     
struct Snake
{
 char body;
 short position_x, position_y;    //    
};

//3.     
class Game
{
private:
 char image;
 enum mapSize { width = 60, height = 30 }; //    
 deque<Snake> snake;      //      ,     
 int score = 0;        //    
 char hit = 'w';       //    
 bool eat_Food = false;      //      
 short food_x, food_y;      //    
 int speed = 400;       //    
 bool snake_state = true;     //    
 int level = 1;        //    
public:
 Game();
 void draw_Frame()  //   
 {
 for (int i = 0; i < height; i++)
 {
 gotoxy(0, i);
 cout << "■";
 gotoxy(width, i);
 cout << "■";
 }
 for (int i = 0; i <= width; i += 2) //■            ,   +2
 {
 gotoxy(i, 0);
 cout << "■";
 gotoxy(i, height);
 cout << "■";
 }
 }
 void init_snake()  //    
 {
 snake.push_back({ '#', width / 2, static_cast<short>(height / 2) }); //    
 for (int i = 0; i < 3; i++) //        ,   
 snake.push_back({ char('o'), width / 2, static_cast<short>((height / 2) + 1 + i) });
 snake.push_back({ ' ', width / 2, static_cast<short>((height / 2) + 4) }); //    ,   ,            
 }
 void draw_Snake() //  
 {
 for (int k = 0; k < snake.size(); k++)
 {
 gotoxy(snake[k].position_x, snake[k].position_y);
 cout << snake[k].body;
 }
 }
 void clear_Tail() //    ,         ,    
 {
 int k = snake.size() - 1;
 gotoxy(snake[k].position_x, snake[k].position_y);
 cout << " "; //      (   ),             
 }
 void draw_Food() //   
 {
 while (1)
 {
 food_x = rand() % (width - 4) + 2; //       ,        ,      x           +2, -4      
 food_y = rand() % (height - 2) + 1; //    
 if (wrong_Location() && food_x % 2 == 0)
 break;
 }
 gotoxy(food_x, food_y);
 cout << "O";
 }
 bool wrong_Location() //           
 {
 for (auto i : snake) //c++11        
 {
 if (food_x == i.position_x && food_y == i.position_y) //            
 return 0;
 }
 return 1;
 }
 void judge_eatFood() //        
 {
 if (food_x == snake[0].position_x && food_y == snake[0].position_y)
 eat_Food = true;
 }
 void judge_state() //           
 {
 if (snake.size() >= 2) 
 {
 deque<Snake>::iterator iter = snake.begin() + 1; //     snake      (   )  iter 
 int x = (iter - 1)->position_x, y = (iter - 1)->position_y;
 for (; iter != snake.end(); ++iter) 
 {
 if (iter->position_x == x && iter->position_y == y) //       
  snake_state = false;
 }
 }
 if(snake[0].position_x == 1 ||
 snake[0].position_x == 59 ||
 snake[0].position_y == 0 ||
 snake[0].position_y == 30) //       
 snake_state = false;
 }
 void key_Down() //    
 {
 char key = hit;
 if (_kbhit()) //    
 hit = _getch(); 
 for (int i = snake.size() - 1; i > 0; i--) //      ,     ,                 
 {
 snake[i].position_x = snake[i - 1].position_x;
 snake[i].position_y = snake[i - 1].position_y;
 }
 if ((hit == 'a' || hit == 'A') && hit != 'd')
 {
 hit = 'a'; snake[0].position_x--;
 }
 else if ((hit == 'd' || hit == 'D') && hit != 'a')
 {
 hit = 'd'; snake[0].position_x++;
 }
 else if ((hit == 'w' || hit == 'W') && hit != 's')
 {
 hit = 'w'; snake[0].position_y--;
 }
 else if ((hit == 's' || hit == 'S') && hit != 'w')
 {
 hit = 's'; snake[0].position_y++;
 }
 }
 void show()
 {
 gotoxy(65, 0);
 cout << "     :";
 gotoxy(71, 1);
 cout << score;
 gotoxy(69, 2);
 cout << "  :" << level;
 }
};
Game::Game()
{
 HideCursor();
 srand(static_cast<unsigned int>(time(NULL))); //     
 init_snake();
 draw_Food();
 Snake tail; //  
 while (1)
 {
 draw_Frame();
 tail = snake.back();
 if (eat_Food)
 {
 snake.back().body = 'o'; //            o,           
 snake.push_back(tail); //       ,      
 gotoxy(food_x, food_y);
 cout << " "; //              ,       ,      
 draw_Food();
 score++;
 if (score % 5 == 0)
 {
 speed *= 0.8;
 level++;
 }
 eat_Food = false;
 }
 if (level == 10)
 break;
 key_Down();
 draw_Snake();
 judge_state();
 if (!snake_state)
 break;
 judge_eatFood(); 
 Sleep(speed);
 clear_Tail();
 show();
 }
}
int main()
{
 system("mode con cols=100 lines=40"); //        
 system("color 7C"); //         
 system("title     v1.0");       
 Game game;
 gotoxy(0, 32);
 cout << "Game over!" << endl;
}
이번 튜 토리 얼 은 여기까지 입 니 다.
더 많은 재 미 있 는 클래식 게임 을 통 해 주 제 를 실현 하고 여러분 에 게 공유 합 니 다.
C++클래식 게임 모음
python 클래식 게임 모음
python 러시아 블록 게임 집합
JavaScript 클래식 게임 을 계속 합 니 다.
자바 클래식 게임 모음
javascript 고전 게임 모음
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기