Compare commits

..

No commits in common. "89071d43994279a2773930b1d9283e0dfa5a3ae5" and "fde0151bd8ece5565f30029a697c445105b75540" have entirely different histories.

11 changed files with 118 additions and 419 deletions

View File

@ -16,7 +16,6 @@ public class Board extends JPanel implements KeyListener
private static int FPS =60; private static int FPS =60;
private static int delay =FPS/1000; private static int delay =FPS/1000;
//Spielfeld Breite und Länge
public static final int BOARD_WIDTH=11; public static final int BOARD_WIDTH=11;
public static final int BOARD_HEIGHT=20; public static final int BOARD_HEIGHT=20;
public static final int BLOCK_SIZE=30; public static final int BLOCK_SIZE=30;
@ -27,17 +26,16 @@ public class Board extends JPanel implements KeyListener
private Stein currenStein; private Stein currenStein;
private Random ran; private Random ran;
// Steinfarben private Color[] colors ={Color.decode("#ff00bf"),Color.decode("#0000ff"),Color.decode("#00ff80"),Color.decode("#ff8000"),Color.decode("#ffb3b3"),
private Color[] colors ={Color.decode("#ff00bf"),Color.decode("#0000ff"),Color.decode("#00ff80"),Color.decode("#ff8000"),Color.decode("#ffb3b3"),
Color.decode("#8000ff"),Color.decode("#ff0040"),}; Color.decode("#8000ff"),Color.decode("#ff0040"),};
// Steinform
public Board() { public Board() {
ran = new Random(); ran = new Random();
steine[0]= new Stein(new int[][]{ steine[0]= new Stein(new int[][]{
{1,1,1}, {1,1,1},
{0,1,0}, {0,1,0}
}, this,colors[0]); }, this,colors[0]);
steine[1]= new Stein(new int[][]{ steine[1]= new Stein(new int[][]{
@ -73,6 +71,7 @@ public class Board extends JPanel implements KeyListener
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
update(); update();
repaint(); repaint();
//System.out.println(n++); //System.out.println(n++);
} }
@ -128,7 +127,6 @@ public class Board extends JPanel implements KeyListener
} }
//Bewegen die Steine mit Taste, Taste-Space : nach unten, Taste d : nach rechts, Taste a : nach links, leider klappt nicht.
@Override @Override
public void keyTyped(KeyEvent e) { public void keyTyped(KeyEvent e) {
// switch(e.getKeyChar()) { // switch(e.getKeyChar()) {
@ -144,8 +142,6 @@ public class Board extends JPanel implements KeyListener
// } // }
} }
//Bewegen die Steine mit Taste, Taste-Space : nach unten, Taste Enter : nach rechts, Taste Escape : nach links
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_SPACE){ if(e.getKeyChar() == KeyEvent.VK_SPACE){

View File

@ -1,42 +1,102 @@
package Tetris; package Tetris;
import java.sql.*;
import javax.swing.*; import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class Game { public class Game {
public static void main(String[] args) { public static void main(String[] args) {
Connection connection = null;
try
{
connection = DriverManager.getConnection("jdbc:sqlite:userhighscore.db");
Statement statement = connection.createStatement();
statement.setQueryTimeout(30);
// Datenbankverbindung herstellen Menue menue = new Menue();
PlayerDBController playerDBController = PlayerDBController.getInstance(); menue.getButton().addActionListener(new java.awt.event.ActionListener() {
playerDBController.initDBConnection(); @Override
List<Player> playerListe = playerDBController.holeSpielerDaten(); public void actionPerformed(java.awt.event.ActionEvent evt) {
JFrame tetrisMenueJframe = new TetrisMenue("Tetris"); String name = JOptionPane.showInputDialog(menue.getParent(),
tetrisMenueJframe.setVisible(true); "What is your name?", null);
TetrisMenue tetrisMenue = (TetrisMenue) tetrisMenueJframe; if(name == null){
tetrisMenue.getSpielStartenButton().addActionListener(new ActionListener() { name = "anon";
@Override }
public void actionPerformed(ActionEvent e) { menue.getParent().setVisible(false);
String spielerName = tetrisMenue.getSpielerNameTextField().getText(); new GameGui(name);
new GameGui(spielerName); }
PlayerDBController.getInstance().speichereSpieler(new Player(spielerName,0)); });
tetrisMenueJframe.setVisible(false); String playername = menue.getName();
ResultSet resultSet = statement.executeQuery("select * from userscore where name = "+ playername);
if(!resultSet.next())
{
// Playername gibt es noch nicht in der Datenbank also anlegen.
// Es fehlt noch der score.
statement.executeUpdate("insert into userscore values(1," + playername + ", 123)");
} }
}); }
// Menue menue = new Menue(); catch(SQLException e)
// final Player[] aktuellerSpieler = new Player[1]; {
// menue.getButton().addActionListener(new java.awt.event.ActionListener() { // if the error message is "out of memory",
// @Override // it probably means no database file is found
// public void actionPerformed(java.awt.event.ActionEvent evt) { System.err.println(e.getMessage());
// aktuellerSpieler[0] = new Player(menue.getTextField().getText(), 0); }
// menue.getParent().setVisible(false); finally
// //new GameGui(name); {
// playerDBController.speichereSpieler(aktuellerSpieler[0]); try
// } {
// }); if(connection != null)
connection.close();
//String playername = menue.getName(); }
//new GameGui(playername); catch(SQLException e)
{
// connection close failed.
System.err.println(e.getMessage());
}
}
} }
}
private static void CreateSqlLiteDatabaseConnection(){
// try
// {
// Connection connection = null;
// // create a database connection
// connection = DriverManager.getConnection("jdbc:sqlite:userhighscore.db");
// Statement statement = connection.createStatement();
// statement.setQueryTimeout(30); // set timeout to 30 sec.
// statement.executeUpdate("drop table if exists userscore");
// statement.executeUpdate("create table userscore (id integer, name string, score integer)");
// statement.executeUpdate("insert into userscore values(1, 'leo', 123)");
// statement.executeUpdate("insert into userscore values(2, 'yui', 456)");
// ResultSet rs = statement.executeQuery("select * from userscore");
// while(rs.next())
// {
// // read the result set
//
// System.out.println("name = " + rs.getString("name"));
// System.out.println("score = " + rs.getInt("score"));
// System.out.println("id = " + rs.getInt("id"));
// }
// }
// catch(SQLException e)
// {
// // if the error message is "out of memory",
// // it probably means no database file is found
// System.err.println(e.getMessage());
// }
// finally
// {
// try
// {
// if(connection != null)
// connection.close();
// }
// catch(SQLException e)
// {
// // connection close failed.
// System.err.println(e.getMessage());
// }
// }
}
}

View File

@ -1,7 +1,6 @@
package Tetris; package Tetris;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionListener;
public class GameGui { public class GameGui {
public static final int width= 550, height =650; public static final int width= 550, height =650;
@ -15,19 +14,18 @@ public class GameGui {
panel.setBorder(BorderFactory.createMatteBorder(500, 10, 10, 50,Color.black)); panel.setBorder(BorderFactory.createMatteBorder(500, 10, 10, 50,Color.black));
//Button //Button
JButton buttonStop = new JButton("Pause"); //JButton button1 = new JButton("Start");
buttonStop.setPreferredSize( new Dimension(100,30)); //button1.setPreferredSize( new Dimension(150,50));
JButton buttonVerlassen = new JButton("verlassen"); JButton buttonPause = new JButton("Pause");
buttonVerlassen.setPreferredSize( new Dimension(100,30)); buttonPause.setPreferredSize( new Dimension(100,30));
JButton buttonScore = new JButton("Score");
buttonScore.setPreferredSize( new Dimension(100,30));
//Button untereinander //Button untereinander
panel.setLayout(new GridLayout(0,1)); panel.setLayout(new GridLayout(0,1));
panel.setBackground(Color.YELLOW); panel.setBackground(Color.YELLOW);
panel.add(buttonStop); panel.add(buttonPause);
panel.add(buttonVerlassen); panel.add(buttonScore);
frame.add(panel,BorderLayout.EAST); frame.add(panel,BorderLayout.EAST);
frame.setSize(width,height); frame.setSize(width,height);
@ -38,15 +36,6 @@ public class GameGui {
frame.addKeyListener(board); frame.addKeyListener(board);
frame.add(board,BorderLayout.CENTER); frame.add(board,BorderLayout.CENTER);
frame.requestFocusInWindow(); frame.requestFocusInWindow();
// Wenn man Button "Verlassen" drückt,schlißt das Spielfenster.
ActionListener al = ev -> {if(ev.getSource() == buttonVerlassen)
{
System.exit(0);
}
};
buttonVerlassen.addActionListener(al);
} }
} }

View File

@ -1,36 +0,0 @@
package Tetris;
public class Player implements Comparable<Player> {
private String name;
private int score;
public Player(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public int compareTo(Player andere) {
return andere.score-score;
}
@Override
public String toString(){
return name +": "+ score;
}
}

View File

@ -1,171 +0,0 @@
package Tetris;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// Beispiel aus https://javabeginners.de/Datenbanken/SQLite-Datenbank.php , sieh unten
class PlayerDBController {
private static final PlayerDBController dbcontroller = new PlayerDBController();
private static Connection connection;
private static final String DB_PATH = "userhighscore.db";
static {
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
System.err.println("Fehler beim Laden des JDBC-Treibers");
e.printStackTrace();
}
}
private PlayerDBController(){
}
public static PlayerDBController getInstance(){
return dbcontroller;
}
//Datenbankverbindung herstellen
public void initDBConnection() {
try {
if (connection != null)
return;
System.out.println("Creating Connection to Database...");
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
if (!connection.isClosed())
System.out.println("...Connection established");
} catch (SQLException e) {
throw new RuntimeException(e);
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
if (!connection.isClosed() && connection != null) {
connection.close();
if (connection.isClosed())
System.out.println("Connection to Database closed");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
});
}
// Es wird eingegebenen Spielername,Score mit 0 in der Datenbank mit insert gespeichert.
public void speichereSpieler(Player player) {
try {
Statement statement = connection.createStatement();
statement.setQueryTimeout(30);
// Spielername gibt es noch garnicht
ResultSet resultSet = statement.executeQuery("select * from userscore where name='"+player.getName()+"'");
if(!resultSet.next()){
statement.executeUpdate("insert into userscore values('"+player.getName()+"',"+player.getScore()+")");
}
else{
// Spielername gibt es schon, update player.score wenn größer als score im Datenbank.
String query = "UPDATE userscore SET score='"+ player.getScore() +"' WHERE name='"+player.getName()+"'";
statement.executeUpdate(query);
}
} catch (SQLException e) {
System.err.println("Couldn't handle DB-Query");
e.printStackTrace();
}
}
// SpielerDaten aus Datenbank holen, dann in einer Arraylist speicher und zurückgeben.
public List<Player> holeSpielerDaten() {
List<Player> playerList = new ArrayList<Player>();
try {
Statement statement = connection.createStatement();
statement.setQueryTimeout(30);
// statement.executeUpdate("create table userscore (name string, score integer)");
// statement.executeUpdate("insert into userscore values('leo', 123)");
// statement.executeUpdate("insert into userscore values('yui', 456)");
System.out.println("vorRS");
ResultSet resultSet = statement.executeQuery("SELECT * FROM userscore;");
System.out.println("nachRS");
while(resultSet.next())
{
playerList.add(new Player(resultSet.getString("name"), resultSet.getInt("score")));
// Playername gibt es noch nicht in der Datenbank also anlegen.
// Es fehlt noch der score.
//statement.executeUpdate("insert into userscore values(1," + playername + ", 123)");
}
resultSet.close();
} catch (SQLException e) {
System.err.println("Couldn't handle DB-Query");
e.printStackTrace();
}
return playerList;
}
private void handleDB() {
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS books;");
stmt.executeUpdate("CREATE TABLE books (author, title, publication, pages, price);");
stmt.execute("INSERT INTO books (author, title, publication, pages, price) VALUES ('Paulchen Paule', 'Paul der Penner', '2001-05-06', '1234', '5.67')");
PreparedStatement ps = connection
.prepareStatement("INSERT INTO books VALUES (?, ?, ?, ?, ?);");
ps.setString(1, "Willi Winzig");
ps.setString(2, "Willi's Wille");
ps.setDate(3, Date.valueOf("2011-05-16"));
ps.setInt(4, 432);
ps.setDouble(5, 32.95);
ps.addBatch();
ps.setString(1, "Anton Antonius");
ps.setString(2, "Anton's Alarm");
ps.setDate(3, Date.valueOf("2009-10-01"));
ps.setInt(4, 123);
ps.setDouble(5, 98.76);
ps.addBatch();
connection.setAutoCommit(false);
ps.executeBatch();
connection.setAutoCommit(true);
ResultSet rs = stmt.executeQuery("SELECT * FROM books;");
while (rs.next()) {
System.out.println("Autor = " + rs.getString("author"));
System.out.println("Titel = " + rs.getString("title"));
System.out.println("Erscheinungsdatum = "
+ rs.getDate("publication"));
System.out.println("Seiten = " + rs.getInt("pages"));
System.out.println("Preis = " + rs.getDouble("price"));
}
rs.close();
connection.close();
} catch (SQLException e) {
System.err.println("Couldn't handle DB-Query");
e.printStackTrace();
}
}
// public static void main(String[] args) {
// PlayerDBController dbc = PlayerDBController.getInstance();
// dbc.initDBConnection();
// dbc.handleDB();
// }
}

View File

@ -1,21 +1,16 @@
package Tetris; package Tetris;
import java.awt.*; import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Stein { public class Stein {
//SteineTyp Block; private int x = 4, y = 0;
private int x = 4, y = 0;
private int normal = 850; private int normal = 850;
private int fast = 50; private int fast = 50;
// private int rotation; private int rotation;
private long beginTime; private long beginTime;
private int delayTime = normal; private int delayTime = normal;
private int deltax = 0; private int deltax = 0;
private boolean collision = false; private boolean collision = false;
// private int size;
public static final int BOARD_WIDTH = 11; public static final int BOARD_WIDTH = 11;
public static final int BOARD_HEIGHT = 20; public static final int BOARD_HEIGHT = 20;
@ -25,12 +20,20 @@ public class Stein {
private Board board; private Board board;
private Color color; private Color color;
public Stein(int[][] coords,Board board,Color color) { public Stein(int[][] coords, Board board, Color color) {
this.coords = coords; this.coords = coords;
this.board = board; this.board = board;
this.color = color; this.color = color;
} }
public void rotate()
{
rotation++;
if(rotation==4)
{
rotation=0;
}
}
public void setX(int x) { public void setX(int x) {
this.x = x; this.x = x;
@ -44,6 +47,7 @@ public class Stein {
this.x = 2; this.x = 2;
this.y = 0; this.y = 0;
collision = false; collision = false;
} }
//Kollisons abfrage //Kollisons abfrage
@ -78,7 +82,7 @@ public class Stein {
} }
deltax = 0; deltax = 0;
// stapeln
if (System.currentTimeMillis() - beginTime > delayTime) { if (System.currentTimeMillis() - beginTime > delayTime) {
if (!(y + 1+coords.length > BOARD_HEIGHT)) { if (!(y + 1+coords.length > BOARD_HEIGHT)) {
for (int row = 0; row < coords.length; row++) { for (int row = 0; row < coords.length; row++) {

View File

@ -1,85 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="Tetris.TetrisMenue">
<grid id="27dc6" binding="tetrisMenuePanel" layout-manager="GridLayoutManager" row-count="3" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="20" left="20" bottom="40" right="40"/>
<constraints>
<xy x="20" y="20" width="576" height="536"/>
</constraints>
<properties>
<foreground color="-1"/>
</properties>
<border type="none"/>
<children>
<component id="dca30" class="javax.swing.JLabel">
<constraints>
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="10" fill="0" indent="0" use-parent-layout="false">
<preferred-size width="30" height="30"/>
</grid>
</constraints>
<properties>
<horizontalAlignment value="0"/>
<text value="Highscores:"/>
<verticalAlignment value="3"/>
<verticalTextPosition value="3"/>
</properties>
</component>
<scrollpane id="b4fda">
<constraints>
<grid row="1" column="2" row-span="2" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false">
<preferred-size width="256" height="287"/>
</grid>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="c58cf" class="javax.swing.JList" binding="list1" custom-create="true" default-binding="true">
<constraints/>
<properties/>
</component>
</children>
</scrollpane>
<component id="96af" class="javax.swing.JTextField" binding="spielerNameTextField">
<constraints>
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false">
<preferred-size width="200" height="30"/>
</grid>
</constraints>
<properties>
<horizontalAlignment value="2"/>
<text value=""/>
</properties>
</component>
<component id="84141" class="javax.swing.JLabel">
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false">
<preferred-size width="30" height="20"/>
</grid>
</constraints>
<properties>
<text value="Spielername:"/>
<verticalAlignment value="0"/>
<verticalTextPosition value="0"/>
</properties>
</component>
<component id="84295" class="javax.swing.JButton" binding="spielStartenButton" default-binding="true">
<constraints>
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="9" fill="0" indent="0" use-parent-layout="false">
<preferred-size width="80" height="30"/>
</grid>
</constraints>
<properties>
<text value="Spiel starten"/>
</properties>
</component>
<component id="3d5e3" class="javax.swing.JLabel" binding="tetrisBildLabel" custom-create="true">
<constraints>
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<horizontalAlignment value="2"/>
<text value=""/>
</properties>
</component>
</children>
</grid>
</form>

View File

@ -1,58 +0,0 @@
package Tetris;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
public class TetrisMenue extends JFrame {
private JTextField spielerNameTextField;
private JButton spielStartenButton;
private JPanel tetrisMenuePanel;
private JLabel tetrisBildLabel;
private JList list1;
public TetrisMenue(String title) {
super(title);
this.setPreferredSize(new Dimension(640,480));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(tetrisMenuePanel);
this.pack();
}
private void createUIComponents() {
// Bild zu JPanel hinzufügen (https://stackoverflow.com/questions/299495/how-to-add-an-image-to-a-jpanel)
try{
BufferedImage myPicture = ImageIO.read(new File("tetris.png"));
tetrisBildLabel = new JLabel(new ImageIcon(myPicture.getScaledInstance(300,125,Image.SCALE_SMOOTH)));
//add(tetrisBildLabel);
}
catch (IOException exception)
{
System.out.println("Fehler bei laden vom Tetris Bild: " + exception.getMessage());
}
java.util.List<Player> playerList = PlayerDBController.getInstance().holeSpielerDaten();
Player[] players = playerList.toArray(new Player[0]);
Arrays.sort(players);
list1 = new JList(players);
}
public JButton getSpielStartenButton() {
return spielStartenButton;
}
public JTextField getSpielerNameTextField() {
return spielerNameTextField;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.