Open8
[Memo]
下は、JavaFXを使用してログインボタンを備えた画面を作成し、そのボタンがMetaMaskログインコントローラを呼び出すサンプルコードです。
java
Copy code
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MetaMaskLoginApp extends Application {
@Override
public void start(Stage primaryStage) {
// ログインボタンを作成
Button loginButton = new Button("MetaMaskでログイン");
loginButton.setOnAction(event -> {
// ログインボタンがクリックされたときの処理
// ここでMetaMaskログインコントローラを呼び出す
System.out.println("MetaMaskログインを開始します...");
// ここにMetaMaskログインコントローラを呼び出すコードを追加
});
// 画面にボタンを配置
StackPane root = new StackPane();
root.getChildren().add(loginButton);
// シーンを作成して画面に配置
Scene scene = new Scene(root, 300, 250);
// ステージにシーンを設定して表示
primaryStage.setTitle("MetaMaskログイン");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
このコードは、JavaFXを使用して単純なウィンドウを作成し、そのウィンドウにログインボタンを配置しています。ログインボタンがクリックされたときの処理の中で、MetaMaskログインコントローラを呼び出す部分には、実際のコードが必要です。これは、前のコードで作成したSpring Bootアプリケーションとの通信や、HTTPリクエストを送信してMetaMaskログイン機能をトリガーするロジックを含める必要があります。
このコードを実行するには、JavaFXのライブラリがクラスパスに含まれている必要があります。また、JavaFXを使ったアプリケーションを実行するには、JavaFXランタイムが必要になります。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import okhttp3.*;
import java.io.IOException;
public class MetaMaskLoginApp extends Application {
private static final String SPRING_BOOT_BASE_URL = "http://localhost:8080"; // Spring BootアプリのURLに置き換える
@Override
public void start(Stage primaryStage) {
// ログインボタンを作成
Button loginButton = new Button("MetaMaskでログイン");
loginButton.setOnAction(event -> {
// ログインボタンがクリックされたときの処理
System.out.println("MetaMaskログインを開始します...");
authenticateWithMetaMask();
});
// 画面にボタンを配置
StackPane root = new StackPane();
root.getChildren().add(loginButton);
// シーンを作成して画面に配置
Scene scene = new Scene(root, 300, 250);
// ステージにシーンを設定して表示
primaryStage.setTitle("MetaMaskログイン");
primaryStage.setScene(scene);
primaryStage.show();
}
private void authenticateWithMetaMask() {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(SPRING_BOOT_BASE_URL + "/auth?authToken=yourAuthTokenHere") // authTokenは実際のトークンに置き換える
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String responseBody = response.body().string();
System.out.println("Authentication response: " + responseBody);
// レスポンスをUIに反映する場合は、Platform.runLater()を使用してJavaFXのUIスレッドで処理を実行する必要があります
} else {
System.out.println("Authentication failed: " + response.message());
}
}
});
}
public static void main(String[] args) {
launch(args);
}
}
javaFX
FlappyBird
package com.example.fxflappybird;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.scene.shape.Rectangle;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import java.util.ArrayList;
import java.util.Random;
public class FlappyBird extends Application {
public static final int WIDTH = 800;
public static final int HEIGHT = 800;
private GraphicsContext gc;
private Rectangle bird;
private ArrayList<Rectangle> columns;
private int ticks, yMotion, score;
private boolean gameOver, started;
private Random rand;
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
Canvas canvas = new Canvas(WIDTH, HEIGHT);
gc = canvas.getGraphicsContext2D();
root.getChildren().add(canvas);
// Renderer のインスタンスを作成
Renderer renderer = new Renderer(this);
// 作成した Renderer を root に追加
root.getChildren().add(renderer);
// Scene の作成
Scene scene = new Scene(root);
// イベントハンドラの設定
scene.setOnMouseClicked(this::jump);
scene.setOnKeyPressed(this::keyPressed);
// AnimationTimer の設定
new AnimationTimer() {
@Override
public void handle(long now) {
actionPerformed();
renderer.render(); // ここで render メソッドを呼び出す
}
}.start();
// ウィンドウの設定
primaryStage.setTitle("Flappy Bird");
primaryStage.setScene(scene);
primaryStage.setResizable(false);
primaryStage.show();
}
private void addColumn(boolean start) {
int space = 300;
int width = 100;
int height = 50 + rand.nextInt(300);
if (start) {
columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height));
columns.add(new Rectangle(WIDTH + width + (columns.size() - 1) * 300, 0, width, HEIGHT - height - space));
} else {
columns.add(new Rectangle(columns.get(columns.size() - 1).getX() + 600, HEIGHT - height - 120, width, height));
columns.add(new Rectangle(columns.get(columns.size() - 1).getX(), 0, width, HEIGHT - height - space));
}
}
private void paintColumn(GraphicsContext gc, Rectangle column) {
gc.setFill(Color.GREEN.darker());
gc.fillRect(column.getX(), column.getY(), column.getWidth(), column.getHeight());
}
private void jump(MouseEvent event) {
if (gameOver) {
bird.setY(HEIGHT / 2 - 10);
columns.clear();
yMotion = 0;
score = 0;
addColumn(true);
addColumn(true);
addColumn(true);
addColumn(true);
gameOver = false;
}
if (!started) {
started = true;
} else if (!gameOver) {
if (yMotion > 0) {
yMotion = 0;
}
yMotion -= 10;
}
}
private void keyPressed(KeyEvent event) {
if (event.getCode() == KeyCode.SPACE) {
jump(null);
}
}
private void actionPerformed() {
int speed = 10;
ticks++;
if (started) {
for (Rectangle column : columns) {
column.setX(column.getX() - speed);
}
if (ticks % 2 == 0 && yMotion < 15) {
yMotion += 2;
}
for (Rectangle column : new ArrayList<>(columns)) {
if (column.getX() + column.getWidth() < 0) {
columns.remove(column);
if (column.getY() == 0) {
addColumn(false);
}
}
}
bird.setY(bird.getY() + yMotion);
for (Rectangle column : columns) {
if (column.getY() == 0 && bird.getX() + bird.getWidth() / 2 > column.getX() + column.getWidth() / 2 - 10 && bird.getX() + bird.getWidth() / 2 < column.getX() + column.getWidth() / 2 + 10) {
score++;
}
if (bird.getBoundsInParent().intersects(column.getBoundsInParent())) {
gameOver = true;
if (bird.getX() <= column.getX()) {
bird.setX(column.getX() - bird.getWidth());
} else {
if (column.getY() != 0) {
bird.setY(column.getY() - bird.getHeight());
} else if (bird.getY() < column.getHeight()) {
bird.setY(column.getHeight());
}
}
}
}
if (bird.getY() > HEIGHT - 120 || bird.getY() < 0) {
gameOver = true;
}
if (bird.getY() + yMotion >= HEIGHT - 120) {
bird.setY(HEIGHT - 120 - bird.getHeight());
gameOver = true;
}
}
// 描画
gc.clearRect(0, 0, WIDTH, HEIGHT);
gc.setFill(Color.CYAN);
gc.fillRect(0, 0, WIDTH, HEIGHT);
gc.setFill(Color.ORANGE);
gc.fillRect(0, HEIGHT - 120, WIDTH, 120);
gc.setFill(Color.GREEN);
gc.fillRect(0, HEIGHT - 120, WIDTH, 20);
gc.setFill(Color.RED);
gc.fillRect(bird.getX(), bird.getY(), bird.getWidth(), bird.getHeight());
for (Rectangle column : columns) {
paintColumn(gc,column);
}
gc.setFill(Color.WHITE);
gc.setFont(new Font("Arial", 100));
if (!started) {
gc.fillText("Click to start!", 75, HEIGHT / 2 - 50);
}
if (gameOver) {
gc.fillText("Game Over!", 100, HEIGHT / 2 - 50);
}
if (!gameOver && started) {
gc.fillText(String.valueOf(score), WIDTH / 2 - 25, 100);
}
}
public void repaint(GraphicsContext gc) {
gc.setFill(Color.CYAN);
gc.fillRect(0, 0, FlappyBird.WIDTH, FlappyBird.HEIGHT);
gc.setFill(Color.ORANGE);
gc.fillRect(0, FlappyBird.HEIGHT - 120, FlappyBird.WIDTH, 120);
gc.setFill(Color.GREEN);
gc.fillRect(0, FlappyBird.HEIGHT - 120, FlappyBird.WIDTH, 20);
gc.setFill(Color.RED);
gc.fillRect(bird.getX(), bird.getY(), bird.getWidth(), bird.getHeight());
for (Rectangle column : columns) {
paintColumn(gc, column);
}
gc.setFill(Color.WHITE);
gc.setFont(new Font("Arial", 100));
if (!started) {
gc.fillText("Click to start!", 75, FlappyBird.HEIGHT / 2 - 50);
}
if (gameOver) {
gc.fillText("Game Over!", 100, FlappyBird.HEIGHT / 2 - 50);
}
if (!gameOver && started) {
gc.fillText(String.valueOf(score), FlappyBird.WIDTH / 2 - 25, 100);
}
}
public static void main(String[] args) {
launch(args);
}
}
Swing
FlappyBird.java
package flappyBird;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;
public class FlappyBird implements ActionListener, MouseListener, KeyListener
{
public static FlappyBird flappyBird;
public final int WIDTH = 800, HEIGHT = 800;
public Renderer renderer;
public Rectangle bird;
public ArrayList<Rectangle> columns;
public int ticks, yMotion, score;
public boolean gameOver, started;
public Random rand;
public FlappyBird()
{
JFrame jframe = new JFrame();
Timer timer = new Timer(20, this);
renderer = new Renderer();
rand = new Random();
jframe.add(renderer);
jframe.setTitle("Flappy Bird");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setSize(WIDTH, HEIGHT);
jframe.addMouseListener(this);
jframe.addKeyListener(this);
jframe.setResizable(false);
jframe.setVisible(true);
bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
columns = new ArrayList<Rectangle>();
addColumn(true);
addColumn(true);
addColumn(true);
addColumn(true);
timer.start();
}
public void addColumn(boolean start)
{
int space = 300;
int width = 100;
int height = 50 + rand.nextInt(300);
if (start)
{
columns.add(new Rectangle(WIDTH + width + columns.size() * 300, HEIGHT - height - 120, width, height));
columns.add(new Rectangle(WIDTH + width + (columns.size() - 1) * 300, 0, width, HEIGHT - height - space));
}
else
{
columns.add(new Rectangle(columns.get(columns.size() - 1).x + 600, HEIGHT - height - 120, width, height));
columns.add(new Rectangle(columns.get(columns.size() - 1).x, 0, width, HEIGHT - height - space));
}
}
public void paintColumn(Graphics g, Rectangle column)
{
g.setColor(Color.green.darker());
g.fillRect(column.x, column.y, column.width, column.height);
}
public void jump()
{
if (gameOver)
{
bird = new Rectangle(WIDTH / 2 - 10, HEIGHT / 2 - 10, 20, 20);
columns.clear();
yMotion = 0;
score = 0;
addColumn(true);
addColumn(true);
addColumn(true);
addColumn(true);
gameOver = false;
}
if (!started)
{
started = true;
}
else if (!gameOver)
{
if (yMotion > 0)
{
yMotion = 0;
}
yMotion -= 10;
}
}
@Override
public void actionPerformed(ActionEvent e)
{
int speed = 10;
ticks++;
if (started)
{
for (int i = 0; i < columns.size(); i++)
{
Rectangle column = columns.get(i);
column.x -= speed;
}
if (ticks % 2 == 0 && yMotion < 15)
{
yMotion += 2;
}
for (int i = 0; i < columns.size(); i++)
{
Rectangle column = columns.get(i);
if (column.x + column.width < 0)
{
columns.remove(column);
if (column.y == 0)
{
addColumn(false);
}
}
}
bird.y += yMotion;
for (Rectangle column : columns)
{
if (column.y == 0 && bird.x + bird.width / 2 > column.x + column.width / 2 - 10 && bird.x + bird.width / 2 < column.x + column.width / 2 + 10)
{
score++;
}
if (column.intersects(bird))
{
gameOver = true;
if (bird.x <= column.x)
{
bird.x = column.x - bird.width;
}
else
{
if (column.y != 0)
{
bird.y = column.y - bird.height;
}
else if (bird.y < column.height)
{
bird.y = column.height;
}
}
}
}
if (bird.y > HEIGHT - 120 || bird.y < 0)
{
gameOver = true;
}
if (bird.y + yMotion >= HEIGHT - 120)
{
bird.y = HEIGHT - 120 - bird.height;
gameOver = true;
}
}
renderer.repaint();
}
public void repaint(Graphics g)
{
g.setColor(Color.cyan);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.orange);
g.fillRect(0, HEIGHT - 120, WIDTH, 120);
g.setColor(Color.green);
g.fillRect(0, HEIGHT - 120, WIDTH, 20);
g.setColor(Color.red);
g.fillRect(bird.x, bird.y, bird.width, bird.height);
for (Rectangle column : columns)
{
paintColumn(g, column);
}
g.setColor(Color.white);
g.setFont(new Font("Arial", 1, 100));
if (!started)
{
g.drawString("Click to start!", 75, HEIGHT / 2 - 50);
}
if (gameOver)
{
g.drawString("Game Over!", 100, HEIGHT / 2 - 50);
}
if (!gameOver && started)
{
g.drawString(String.valueOf(score), WIDTH / 2 - 25, 100);
}
}
public static void main(String[] args)
{
flappyBird = new FlappyBird();
}
@Override
public void mouseClicked(MouseEvent e)
{
jump();
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_SPACE)
{
jump();
}
}
@Override
public void mousePressed(MouseEvent e)
{
}
@Override
public void mouseReleased(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
}
swing
package flappyBird
Renderer.java
package flappyBird;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Renderer extends JPanel
{
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
FlappyBird.flappyBird.repaint(g);
}
}
javaFx
package flappyBird
Renderer.java
package com.example.fxflappybird;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
public class Renderer extends Pane {
private Canvas canvas;
private FlappyBird flappyBird;
public Renderer(FlappyBird flappyBird) {
this.flappyBird = flappyBird;
canvas = new Canvas(FlappyBird.WIDTH , FlappyBird.HEIGHT);
getChildren().add(canvas);
}
public void render() {
GraphicsContext gc = canvas.getGraphicsContext2D();
flappyBird.repaint(gc);
}
}
Snake
package com.example.snake;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.*;
public class SnakeGame extends JPanel implements ActionListener, KeyListener {
private class Tile {
int x;
int y;
Tile(int x, int y) {
this.x = x;
this.y = y;
}
}
int boardWidth;
int boardHeight;
int tileSize = 25;
//snake
Tile snakeHead;
ArrayList<Tile> snakeBody;
//food
Tile food;
Random random;
//game logic
int velocityX;
int velocityY;
Timer gameLoop;
boolean gameOver = false;
SnakeGame(int boardWidth, int boardHeight) {
this.boardWidth = boardWidth;
this.boardHeight = boardHeight;
setPreferredSize(new Dimension(this.boardWidth, this.boardHeight));
setBackground(Color.black);
addKeyListener(this);
setFocusable(true);
snakeHead = new Tile(5, 5);
snakeBody = new ArrayList<Tile>();
food = new Tile(10, 10);
random = new Random();
placeFood();
velocityX = 1;
velocityY = 0;
//game timer
gameLoop = new Timer(100, this); //how long it takes to start timer, milliseconds gone between frames
gameLoop.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
draw(g);
}
public void draw(Graphics g) {
//Grid Lines
for(int i = 0; i < boardWidth/tileSize; i++) {
//(x1, y1, x2, y2)
g.drawLine(i*tileSize, 0, i*tileSize, boardHeight);
g.drawLine(0, i*tileSize, boardWidth, i*tileSize);
}
//Food
g.setColor(Color.red);
// g.fillRect(food.x*tileSize, food.y*tileSize, tileSize, tileSize);
g.fill3DRect(food.x*tileSize, food.y*tileSize, tileSize, tileSize, true);
//Snake Head
g.setColor(Color.green);
// g.fillRect(snakeHead.x, snakeHead.y, tileSize, tileSize);
// g.fillRect(snakeHead.x*tileSize, snakeHead.y*tileSize, tileSize, tileSize);
g.fill3DRect(snakeHead.x*tileSize, snakeHead.y*tileSize, tileSize, tileSize, true);
//Snake Body
for (int i = 0; i < snakeBody.size(); i++) {
Tile snakePart = snakeBody.get(i);
// g.fillRect(snakePart.x*tileSize, snakePart.y*tileSize, tileSize, tileSize);
g.fill3DRect(snakePart.x*tileSize, snakePart.y*tileSize, tileSize, tileSize, true);
}
//Score
g.setFont(new Font("Arial", Font.PLAIN, 16));
if (gameOver) {
g.setColor(Color.red);
g.drawString("Game Over: " + String.valueOf(snakeBody.size()), tileSize - 16, tileSize);
}
else {
g.drawString("Score: " + String.valueOf(snakeBody.size()), tileSize - 16, tileSize);
}
}
public void placeFood(){
food.x = random.nextInt(boardWidth/tileSize);
food.y = random.nextInt(boardHeight/tileSize);
}
public void move() {
//eat food
if (collision(snakeHead, food)) {
snakeBody.add(new Tile(food.x, food.y));
placeFood();
}
//move snake body
for (int i = snakeBody.size()-1; i >= 0; i--) {
Tile snakePart = snakeBody.get(i);
if (i == 0) { //right before the head
snakePart.x = snakeHead.x;
snakePart.y = snakeHead.y;
}
else {
Tile prevSnakePart = snakeBody.get(i-1);
snakePart.x = prevSnakePart.x;
snakePart.y = prevSnakePart.y;
}
}
//move snake head
snakeHead.x += velocityX;
snakeHead.y += velocityY;
//game over conditions
for (int i = 0; i < snakeBody.size(); i++) {
Tile snakePart = snakeBody.get(i);
//collide with snake head
if (collision(snakeHead, snakePart)) {
gameOver = true;
}
}
if (snakeHead.x*tileSize < 0 || snakeHead.x*tileSize > boardWidth || //passed left border or right border
snakeHead.y*tileSize < 0 || snakeHead.y*tileSize > boardHeight ) { //passed top border or bottom border
gameOver = true;
}
}
public boolean collision(Tile tile1, Tile tile2) {
return tile1.x == tile2.x && tile1.y == tile2.y;
}
@Override
public void actionPerformed(ActionEvent e) { //called every x milliseconds by gameLoop timer
move();
repaint();
if (gameOver) {
gameLoop.stop();
}
}
@Override
public void keyPressed(KeyEvent e) {
// System.out.println("KeyEvent: " + e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_UP && velocityY != 1) {
velocityX = 0;
velocityY = -1;
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN && velocityY != -1) {
velocityX = 0;
velocityY = 1;
}
else if (e.getKeyCode() == KeyEvent.VK_LEFT && velocityX != 1) {
velocityX = -1;
velocityY = 0;
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT && velocityX != -1) {
velocityX = 1;
velocityY = 0;
}
}
//not needed
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
}
package com.example.snake;
import javax.swing.*;
public class App {
public static void main(String[] args) throws Exception {
int boardWidth = 600;
int boardHeight = boardWidth;
JFrame frame = new JFrame("Snake");
frame.setVisible(true);
frame.setSize(boardWidth, boardHeight);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SnakeGame snakeGame = new SnakeGame(boardWidth, boardHeight);
frame.add(snakeGame);
frame.pack();
snakeGame.requestFocus();
}
}
public class Main {
public static void main(String[] args) {
int x;
int y = 3;
if (y > 2) {
x = ++y;
y = x + 5;
}
System.out.println(x + y);
}
}