о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о Популярная игра Змейка! о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о
Простой и удобный интерфейс дает возможность насладится всем известной игрой Змейка. В архиве есть исходники программы на с++ builder и скомпилированый ехе файл. Управление производится с помощью стрелочек на клавиатуре компьютера. Скачиваем и играем)))
Часть кода программы:
//автор(с): Бабченко Александр
#ifndef _UNICODE
#define _UNICODE
#endif
#ifndef UNICODE
#define UNICODE
#endif
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#include <windows.h>
#include <stdio.h>
#include <time.h>
#ifdef __BORLANDC__
#pragma hdrstop
#pragma warn -8027
#endif
#include "console.h"
#include "controls.h"
#define GAME_CMD_START 0
#define GAME_CMD_HELP 1
#define GAME_CMD_QUIT 2
#define STATE_G_MENU 0
#define STATE_G_PLAY 1
#define STATE_G_HELP 2
#define DELAY_START 150UL
#define SNAKE_LENGTH 77
#define SNAKE_LEVELS 7
class Snake: public xConsole {
private:
DWORD score;
DWORD delay;
WORD level;
WORD state;
WORD key_ctrl;
SMALL_RECT frect;
COORD obj_pos;
WORD obj_inc;
xField field;
xMsgBox msgbox;
xButtonGroup<3> buttons;
slist<COORD> snake;
public:
Snake(void);
virtual ~Snake();
private:
virtual void OnCreate(void);
virtual void OnMouseMove(const COORD&);
virtual void OnMouseDown(UINT, const COORD&);
virtual void OnMouseUp(const COORD&);
// virtual void OnMouseWheel(int);
// virtual void OnMouseDblDown(UINT, const COORD&);
virtual void OnKeyDown(WORD);
virtual void OnKeyUp(WORD);
virtual void OnProcess(void);
private:
void draw_play(void);
void generate_pos(void);
bool is_self_intersect(void);
void put_bonus(void);
void show_help(void);
void draw_victory(void);
void draw_pause(void);
};
//-------------------------------------------------------------------------------------------------------
Snake::Snake():xConsole(),
score(0UL),
delay(0UL),
level(0),
state(STATE_G_MENU),
key_ctrl(0){
}
Snake::~Snake(){
snake.clear();
msgbox.destroy();
}
//событие возникает создание консольного буфера или присваивание текущего
void Snake::OnCreate(void){
SetConsoleTitleW(L"Змейка");
srand((unsigned int)time(NULL));
//добавляем дополнительный буфер для игрового поля
if(Add() == ERROR_SUCCESS){
setActiveNoVisible(1);
setBufferSize(Width(), Height() / 9);
SMALL_RECT rc = getWindowSize();
rc.Bottom = Height() - 1;
setWindowSize(rc, TRUE);
VisibleCaret(FALSE);
}
//рисуем меню игры
setActiveNoVisible(0);
setBufferSize(Width(), Height() / 11);
SMALL_RECT rc = getWindowSize();
rc.Bottom = Height() - 1;
setWindowSize(rc, TRUE);
VisibleCaret(FALSE);
const WORD color = BACKGROUND_RED | BACKGROUND_BLUE;
DrawRect(0, 0, Width(), 3, color);
DrawRect(0, Height() - 4, Width(), Height(), color);
const TCHAR str[] = TEXT("\4 \4 \4 ЗМЕЙКА \4 \4 \4");
const int len = lstrlen(str);
WriteText(str, len, (Width() - len) / 2, 2, color | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
buttons.set_parameter(this, 3);
buttons.add(0, TEXT("НАЧАТЬ ИГРАТЬ"), (Width() - 32)/2, 5, 32, 4);
buttons.add(1, TEXT("СПРАВКА ИГРЫ"), (Width() - 32)/2, 11, 32, 4);
buttons.add(2, TEXT("ВЫЙТИ ИЗ ИГРЫ"), (Width() - 32)/2, 17, 32, 4);
const TCHAR hlp[] = TEXT("Для выбора пункта меню используйте мышку или клавиши клавиатуры");
WriteText(hlp, lstrlen(hlp), 2, Height()-2, color | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
setAsyncLoop(TRUE);
msgbox.create(this);
setActiveNoVisible(1);
setFixedHeight(Height() / 9);
setActiveNoVisible(0);
level = 0;
}
//событие движение мыши
void Snake::OnMouseMove(const COORD& pos){
switch(state){
case STATE_G_MENU:
buttons.mouse_move(pos);
break;
}
}
void Snake::OnMouseDown(UINT but, const COORD& pos){
switch(state){
case STATE_G_MENU:
buttons.mouse_down(but, pos);
break;
}
}
void Snake::OnMouseUp(const COORD& pos){
if(state == STATE_G_MENU){
switch(buttons.mouse_up(pos)){
case GAME_CMD_START:
draw_play();
break;
case GAME_CMD_HELP:
show_help();
break;
case GAME_CMD_QUIT:
setAsyncLoop(FALSE);
break;
}
}
}
//событие нажатие клавиши клавиатуры
void Snake::OnKeyDown(WORD key){
switch(state){
case STATE_G_MENU:
buttons.key_down(key);
break;
case STATE_G_PLAY:
switch(key){
case VK_LEFT:
case 'A':
key_ctrl = VK_LEFT;
break;
case VK_RIGHT:
case 'D':
key_ctrl = VK_RIGHT;
break;
case VK_UP:
case 'W':
key_ctrl = VK_UP;
break;
case VK_DOWN:
case 'S':
key_ctrl = VK_DOWN;
break;
case VK_ESCAPE: //выход
setAsyncLoop(FALSE);
break;
case VK_SPACE: //пауза пробел
MessageBeep(MB_ICONINFORMATION);
draw_pause();
break;
}
break;
}
}
//событие отпускание клавиши клавиатуры
void Snake::OnKeyUp(WORD key){
if(state == STATE_G_MENU){
switch(buttons.key_up(key)){
case GAME_CMD_START:
draw_play();
break;
case GAME_CMD_HELP:
show_help();
break;
case GAME_CMD_QUIT:
setAsyncLoop(FALSE);
break;
}
}
}
Телеграм
-