Qtで■を動かすプログラムを作成しました。
内容は以下になります。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QPainter>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void paintEvent(QPaintEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
void timerEvent(QTimerEvent *event) override;
private:
int boatX, boatY;
int boatSpeed;
bool upPressed, downPressed, leftPressed, rightPressed;
void moveBoat();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QPainter>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), boatX(200), boatY(200), boatSpeed(5),
upPressed(false), downPressed(false), leftPressed(false), rightPressed(false)
{
setFixedSize(800, 600); // ウィンドウサイズを設定
setWindowTitle("■の操縦");
// タイマーで定期的に動きの更新
startTimer(16); // 16msで更新(約60FPS)
}
MainWindow::~MainWindow()
{
}
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setBrush(Qt::blue);
painter.setPen(Qt::black);
// 矩形で簡単な■を描画
painter.drawRect(boatX, boatY, 50, 30); // X, Y, 幅, 高さ
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Up) {
upPressed = true;
} else if (event->key() == Qt::Key_Down) {
downPressed = true;
} else if (event->key() == Qt::Key_Left) {
leftPressed = true;
} else if (event->key() == Qt::Key_Right) {
rightPressed = true;
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Up) {
upPressed = false;
} else if (event->key() == Qt::Key_Down) {
downPressed = false;
} else if (event->key() == Qt::Key_Left) {
leftPressed = false;
} else if (event->key() == Qt::Key_Right) {
rightPressed = false;
}
}
void MainWindow::moveBoat()
{
if (upPressed) {
boatY -= boatSpeed;
}
if (downPressed) {
boatY += boatSpeed;
}
if (leftPressed) {
boatX -= boatSpeed;
}
if (rightPressed) {
boatX += boatSpeed;
}
// 移動範囲を制限
boatX = qBound(0, boatX, width() - 50);
boatY = qBound(0, boatY, height() - 30);
}
void MainWindow::timerEvent(QTimerEvent *event)
{
moveBoat();
update(); // 画面を更新
}
これで■を上下左右に動かすことが出来ます。
↓youtubeリンク
https://youtu.be/HenwaD7r6No