画面上でボールを動かすプログラムですこれの下にラケットをかきボールを打ち返して反射させたいのですがいまいちうまくいきませんどなたかご教授ください
#define ID_TIMER 100 //タイマーの識別番号を100とする
#include <windows.h>
#include<stdlib.h>
#include <string.h>
#include <tchar.h>
#define ELLIPSE_SIZE 40 //ボールのサイズを40画素とする
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);/*関数のプロトタイプを宣言をしよう*/
TCHAR ClassName[]=_T("Yellow Ball Animation");//ウィンドクラス
TCHAR Caption[64]=_T("黄色のボールアニメーション");
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) //windowsのメインエントリ
{
WNDCLASSEX wcex;//ウインドウクラスの構造体
HWND hWnd;//ウインドウハンドル
MSG msg;//メッセージ構造体
//ウィンドウクラス構造体を設定します。
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW | CS_VREDRAW;//
wcex.lpfnWndProc=(WNDPROC)WndProc;//ウィンドウプロージャの関数名
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+3);/*背景は黒色(+1 背景白色、+2 背景灰色)*/
wcex.lpszMenuName =NULL;
wcex.lpszClassName=_T("Ball-Anime");
wcex.hIconSm =LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wcex);//ウィンドクラスの登録
//ウインドウの作成
hWnd = CreateWindow(wcex.lpszClassName,//ウインドウクラス名
_T("ボールのアニメーション"),/*ウィンドウに表示されるタイトル
文字*/
WS_OVERLAPPEDWINDOW,//ウィンドウのスタイル
CW_USEDEFAULT,//水平位置
CW_USEDEFAULT,//垂直位置
400,//ウィンドウの幅
600,//ウィンドウ高さ
NULL,//親ウインドウ無し
NULL,//ウインドウメニュー無し
hInstance,//インスタンスハンドル
NULL);//WM_CREATE情報
//ウインドウの表示
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
//メッセージループ
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;//戻り値を返します。
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HBRUSH hBrush;
static POINT pt;//構造体POINNT(x,y)を使う
static BOOL xplus, yplus;
static int id, speed=3;
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CREATE:
SetTimer (hWnd, ID_TIMER,10,NULL);/*Timerを10ミリ毎秒に設定する*/
return 0;
case WM_TIMER:
if(xplus) pt.x+=speed;
else pt.x-=speed;
if(yplus)pt.y+=speed;
else pt.y-=speed;
GetClientRect(hWnd,&rect);/*クライアントのウィンドウサイズをシステムから得る*/
if(pt.x+ELLIPSE_SIZE > rect.right) xplus=FALSE;
else if(pt.x < 0) xplus=TRUE;
if(pt.y+ELLIPSE_SIZE >rect.bottom)yplus=FALSE;
else if(pt.y < 0)yplus=TRUE;
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_CLOSE:
id=MessageBox(hWnd,_T("終了しても良いですか"),
_T("終了確認"), MB_YESNO);
if(id ==IDYES)
DestroyWindow(hWnd);
break;//retrun 0でもOK
case WM_KEYDOWN:
if(wParam==VK_UP){
speed++;
if(speed>15)
speed=15;
}
if(wParam==VK_DOWN){
speed--;
if(speed<1)
speed =1;
}
wsprintf(Caption, _T("ボールの速度= %d"),
speed);
SetWindowText(hWnd,Caption);
break;//retrun 0でもOK
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
hBrush=CreateSolidBrush(RGB(255,255,0));/*黄色のブラシを作成する*/
SelectObject(hdc,hBrush);/*作成した黄色ブラシを使用する*/
Ellipse(hdc,pt.x,pt.y,
pt.x+ELLIPSE_SIZE, pt.y+ELLIPSE_SIZE);
DeleteObject(hBrush);
EndPaint(hWnd,&ps);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JOURNALRECORD 猫パンチでノッ...
-
キャレットの現在位置の表示 (W...
-
COMPORTマルチスレッドで例外発生
-
ボタンの色(WINAPI)
-
オーバーレイみたいな処理がしたい
-
C言語についての質問です
-
「指定されたキャストは有効で...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
プログラムでの数字につく”f”の...
-
DWORDの実際の型は何でしょうか
-
正負を反転させて出力するプロ...
-
「Aに対するBの割合」と「Aに対...
-
#define _CRT_SECURE_NO_WARNIN...
-
ダメだ・・・分からない。while...
-
VB.net Double と...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
音量調節
-
return文がない場合の戻り値は...
-
C#のswitch文を簡略化したいの...
-
ゲームとかの解像度変更&全画...
-
エラー Run-Time Check Failur...
-
コンソールアプリケーションの...
-
キャレットの現在位置の表示 (W...
-
エディットボックスの背景の色...
-
COMPORTマルチスレッドで例外発生
-
ツリーコントロールの開閉アイ...
-
C言語win32api、エディットボッ...
-
Win32APIにて、ウィンドウ全体...
-
Win32APIでウィンドウを中央に...
-
エディットコントロール入力時...
-
ダイアログプログラムでEnterキ...
-
不思議な現象が起こるプログラ...
-
Win32のファイルダイアログのサ...
-
C言語のswitch case文で、scanf...
-
WM_CREATE について
-
ボタンのアイコン表示
おすすめ情報