Я люблю Киев

КИЕВСКИЙ ФОРУМ
КУЛЬТУРНОГО ОБЩЕНИЯ
FORUMKIEV.COM
Правила Новое Вопросы Ссылки
КИЕВ ПОГОДА ИСТОРИЯ ТУРИСТУ
N-728-MI-2
Вернуться   Киевский форум > Право и бизнес > Интернет бизнес - сайты, SEO, freelance

Игра арканоид на с++


Ответ
 
Опции темы Опции просмотра
Старый 15.04.2008, 15:01   #1
Турист
 Аватар для Morli
IP:
Сообщений: 1
"Спасибок": 0
Очки репутации: 0
Мнения:
Доп. информация
- Автор темы - По умолчанию Игра арканоид на с++

Добрый день уважаемые эксперты. У меня появилась небольшая проблемка в плане реализации условия по которому мячик должен отбиваться от ракетки.Иными словами я просто зашел в тупик. Вот код моей программы написанный на MFC. Я максимально его упростил.

// gameclasses.h
const int WINDOW_WIDTH = 600;
const int WINDOW_HEIGHT = 600;
const int BALL = 20;
int SPEED = 20;
const int PADDLE_WIDTH = 100;
const int PADDLE_HEIGHT = 10;
class CMainWin : public CFrameWnd
{
// declare virtual frame data members
CDC m_memDC;
CBitmap m_bmp;
CBrush m_bkbrush;

// declare ball properties
int ball_x;
int ball_y;
int xv;
int yv;
// declare paddle properties
int paddle_x;
int paddle_y;
// declare blocks
RECT block;
// declare pens
CPen m_RedPen,m_YellowPen,m_GreenPen,m_BluePen;
CPen m_OldPen;
public:
CMainWin();
afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT ID);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
class CApp : public CWinApp
{
public:
BOOL InitInstance();
};

// gameclasses.cpp
#include <afxwin.h>
#include <string.h>
#include <mmsystem.h> // very important and include WINMM.LIB too!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "gameclasses.h"

CMainWin::CMainWin()
{
CRect rect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
Create(NULL,"Game Arcanoid!!! version 1.0",WS_SYSMENU,rect);
// define ball
ball_x = WINDOW_WIDTH/2;
ball_y = WINDOW_HEIGHT-85; // 55
srand(GetTickCount());
xv = -4+rand()%8;
yv = -4+rand()%8;
// define paddle
paddle_x = (WINDOW_WIDTH/2)-(PADDLE_WIDTH/2);
paddle_y = WINDOW_HEIGHT - 50;

// define blocks
block.top = 10;
block.bottom = 20;
block.left = 10;
block.right = 50;
}
void CMainWin::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)
{
if(nChar==VK_LEFT)
{
if(paddle_x!=0)
paddle_x-=10;
else
paddle_x=0;
}
else if(nChar==VK_RIGHT)
{
if(paddle_x!=WINDOW_WIDTH-PADDLE_WIDTH)
paddle_x+=10;
else
paddle_x=WINDOW_WIDTH-PADDLE_WIDTH;
}
}
void CMainWin::OnPaint()
{
CPaintDC dc(this);

dc.Rectangle(block.left,block.top,block.right,bloc k.bottom);
dc.Ellipse(ball_x, ball_y, ball_x + BALL, ball_y + BALL);
dc.MoveTo(paddle_x,paddle_y);
dc.LineTo(paddle_x+PADDLE_WIDTH,paddle_y);
}

void CMainWin::OnTimer(UINT ID)
{
CClientDC dc(this);
ball_x+=xv;
ball_y+=yv;
/* if( ball_x >= (paddle_x) && ball_x <= (paddle_x+PADDLE_WIDTH) && ball_y == (paddle_y-BALL))
{
yv=-yv;
ball_y+=yv;
}*/
if (ball_x < 0 || ball_x > WINDOW_WIDTH - 30)
{
xv=-xv;
ball_x+=xv;
}
else if (ball_y < 0 || ball_y > WINDOW_HEIGHT - 55)
{
yv=-yv;
ball_y+=yv;
}
// собственно вот тут то место с условием которое надо поменять чтобы мяч отскакивал от ракетки
if( ((ball_x+BALL)/2) >= paddle_x && ((ball_x+BALL)/2) <= (paddle_x+PADDLE_WIDTH) && (ball_y+BALL) == paddle_y )
{
yv=-yv;
ball_y+=yv;
}
ball_x+=xv;
ball_y+=yv;
Invalidate();
}
void CMainWin::OnDestroy()
{
KillTimer(1);
}
BOOL CApp::InitInstance()
{
m_pMainWnd = new CMainWin;
// starting timer
if(m_pMainWnd->SetTimer(1,SPEED,NULL)!= 1)
return FALSE;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_DESTROY()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
CApp App;

Заранее спасибо. Морли.
Morli вне форума  

Ответить с цитированием Вверх
Старый 25.12.2008, 14:18   #2
Житель
 Аватар для NickNill
IP:
Сообщений: 383
"Спасибок": 285
Очки репутации: 0
Мнения:
Доп. информация
По умолчанию Re: Игра арканоид на с++

эх, жаль не знаю с++)) нашел ошибку?)
NickNill вне форума  

Ответить с цитированием Вверх
Старый 03.03.2012, 23:17   #3
Турист
 Аватар для rewers
IP:
Сообщений: 2
"Спасибок": 0
Очки репутации: 0
Мнения:
Доп. информация
По умолчанию

Я где-то видел исходник игры.Пиши,может найду.
rewers вне форума  

Ответить с цитированием Вверх

Ответ

Опции темы
Опции просмотра

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кара Господня... Полковник Основной 119 16.08.2010 20:45
Игра inlight Теревені 1 15.06.2009 16:28
Игра для эрудитов Sokrowishe Форумные игры 13 04.03.2009 13:26
Игра в правду Unknown_Girl Кино и ТВ 0 20.05.2008 16:01


Часовой пояс GMT +3, время: 00:38.


Работает на vBulletin® Версия форума 3.х.х. Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.

© ForumKiev.com 2007 - 2021