Open8

[Memo]

Nako80Nako80

下は、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ランタイムが必要になります。

Nako80Nako80
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);
    }
}
Nako80Nako80

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);
    }
}


Nako80Nako80

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)
	{

	}

}

Nako80Nako80

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);
	}
	
}
Nako80Nako80

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);
    }
}
Nako80Nako80

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();
    }
}
Nako80Nako80

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);
}
}