Initial commit

This commit is contained in:
Victor 2012-12-08 22:34:59 +02:00
commit fb03d35727
21 changed files with 685 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
Desktop.ini

1
README.md Normal file
View File

@ -0,0 +1 @@
Java TicTacToe game.

View File

@ -0,0 +1,31 @@
package jtictactoe;
/**
*
* @author aNNiMON
*/
public class Figure {
public static final char
EMPTY = ' ',
X = 'X',
O = 'O';
protected char figure;
public Figure() {
this.figure = EMPTY;
}
public boolean isEmpty() {
return (figure == EMPTY);
}
public char getFigure() {
return figure;
}
public void setFigure(char figure) {
this.figure = figure;
}
}

View File

@ -0,0 +1,117 @@
package jtictactoe;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
/**
*
* @author aNNiMON
*/
public class GameBoard extends JPanel {
private static final int CELL_SIZE = 150;
private static final int OFFSET = 15;
private BufferedImage strikedHor, strikedVer, strikedDiag, strikedDiagRev;
private BufferedImage background, figureX, figureO;
private Table table;
private TitlePanel title;
private int imgWidth, imgHeight;
public GameBoard(TitlePanel title) {
this.title = title;
initImages();
imgWidth = background.getWidth();
imgHeight = background.getHeight();
setPreferredSize( new Dimension(imgWidth, imgHeight) );
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent evt) {
gameBoardMousePressed(evt);
}
});
table = new Table();
table.resetTable();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(background, 0, 0, null);
drawTable(g);
drawStrike(g);
}
private void drawTable(Graphics g) {
Figure[][] figures = table.getFiguresArray();
for (int i = 0; i < figures.length; i++) {
for (int j = 0; j < figures[0].length; j++) {
char figure = figures[i][j].getFigure();
if (figure != Figure.EMPTY) {
BufferedImage image = ( (figure == Figure.X) ? figureX : figureO );
int x = j * CELL_SIZE + OFFSET + (CELL_SIZE - image.getWidth()) / 2;
int y = i * CELL_SIZE + OFFSET + (CELL_SIZE - image.getHeight()) / 2;
g.drawImage(image, x, y, null);
}
}
}
}
private void drawStrike(Graphics g) {
int strikeMode = table.getStrikedMode();
if (strikeMode != Table.MODE_NOT_STRIKED) {
final int strikedSize = strikedHor.getHeight();
int coord = OFFSET + (CELL_SIZE - strikedSize) / 2;
int strikePos = strikeMode & 0x03;
if ( (strikeMode & Table.MODE_STRIKE_DIAGONAL) != 0 ) {
g.drawImage(strikedDiag, coord, coord, null);
} else if ( (strikeMode & Table.MODE_STRIKE_DIAGONAL_REVERSE) != 0 ) {
g.drawImage(strikedDiagRev, coord - OFFSET / 2, coord - OFFSET / 2, null);
} else if ( (strikeMode & Table.MODE_STRIKE_HORIZONTAL) != 0 ) {
g.drawImage(strikedHor, coord, coord + strikePos * CELL_SIZE, null);
} else if ( (strikeMode & Table.MODE_STRIKE_VERTICAL) != 0 ) {
g.drawImage(strikedVer, coord + strikePos * CELL_SIZE, coord, null);
}
}
}
private void gameBoardMousePressed(MouseEvent evt) {
Point id = convertToID( evt.getPoint() );
//table.computerMove();
table.setFigure(id.x, id.y);
if (table.getStrikedMode() == Table.MODE_NOT_STRIKED) title.setMessage("");
if (!table.hasMoreMoves()) {
char winner = table.checkWinner();
if (winner != Figure.EMPTY) {
int winX = (winner == Figure.X) ? 1 : 0;
title.updateWin(winX, 1 - winX);
title.setMessage(winner + " is win");
} else title.setMessage("Drow");
}
repaint();
}
private void initImages() {
background = Util.getImage("/res/table_bg.jpg");
figureX = Util.getImage("/res/x.png");
figureO = Util.getImage("/res/o.png");
strikedHor = Util.getImage("/res/striked.png");
strikedVer = Util.getImage("/res/striked_ver.png");
strikedDiag = Util.getImage("/res/striked_diagonal.png");
strikedDiagRev = Util.getImage("/res/striked_diagonal_rev.png");
}
private Point convertToID(Point point) {
point.x /= imgWidth / 3;
point.y /= imgHeight / 3;
return point;
}
}

32
src/jtictactoe/Main.java Normal file
View File

@ -0,0 +1,32 @@
package jtictactoe;
import java.awt.BorderLayout;
import javax.swing.JFrame;
/**
*
* @author aNNiMON
*/
public class Main extends JFrame {
public static void main(String[] args) {
new Main().setVisible(true);
}
public Main() {
super("JTicTacToe");
setResizable(false);
setUndecorated(true);
setAlwaysOnTop(true);
setBounds(300, 120, 0, 0);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout(0, 0));
TitlePanel title = new TitlePanel(this);
add(title, BorderLayout.NORTH);
add(new GameBoard(title));
pack();
}
}

201
src/jtictactoe/Table.java Normal file
View File

@ -0,0 +1,201 @@
package jtictactoe;
import java.util.Random;
/**
*
* @author aNNiMON
*/
public class Table {
public static final int
MODE_NOT_STRIKED = 0,
MODE_STRIKE_HORIZONTAL = 0x04,
MODE_STRIKE_VERTICAL = 0x08,
MODE_STRIKE_DIAGONAL = 0x10,
MODE_STRIKE_DIAGONAL_REVERSE = 0x20;
private boolean nextMoveIsX;
private Figure[][] table;
private Random random;
private int strikedMode;
public Table() {
table = new Figure[3][3];
random = new Random();
}
public void resetTable() {
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[0].length; j++) {
table[i][j] = new Figure();
}
}
strikedMode = MODE_NOT_STRIKED;
nextMoveIsX = true;
}
public int getStrikedMode() {
return strikedMode;
}
public Figure[][] getFiguresArray() {
return table;
}
public void setFigure(int x, int y) {
if( (checkWinner() != Figure.EMPTY) || (!hasMoreMoves()) ) {
resetTable();
return;
}
boolean xIsNorm = ( (0 <= x) && (x < 3) );
boolean yIsNorm = ( (0 <= y) && (y < 3) );
if (xIsNorm && yIsNorm && table[y][x].isEmpty()) {
table[y][x].setFigure(nextMoveIsX ? Figure.X : Figure.O);
nextMoveIsX = !nextMoveIsX;
computerMove();
}
}
public void computerMove() {
if( (checkWinner() != Figure.EMPTY) || (!hasMoreMoves()) ) {
//resetTable();
return;
}
computerAI();
nextMoveIsX = !nextMoveIsX;
}
private void computerAI() {
final Figure[][] array = new Figure[][] {
// Horizontal check
table[0],
table[1],
table[2],
// Vertical check
{ table[0][0], table[1][0], table[2][0] },
{ table[0][1], table[1][1], table[2][1] },
{ table[0][2], table[1][2], table[2][2] },
// Diagonal check
{ table[0][0], table[1][1], table[2][2] },
{ table[0][2], table[1][1], table[2][0] }
};
char[] maybeWinnerArray = new char[array.length];
// Calculate winning situations for computer (zeroes).
for (int i = 0; i < array.length; i++) {
Figure[] figures = array[i];
char maybeWinner = maybeWinnerComboIs(figures);
maybeWinnerArray[i] = maybeWinner;
if (maybeWinner == Figure.O) {
if (setCompFigure(figures)) return;
}
}
// Calculate winning situations for the player (crosses).
for (int i = 0; i < array.length; i++) {
Figure[] figures = array[i];
char maybeWinner = maybeWinnerArray[i];
if (maybeWinner == Figure.X) {
if (setCompFigure(figures)) return;
}
}
// Trying to put figure to the center.
int x = 1, y = 1;
if(!table[y][x].isEmpty() || (random.nextInt(5) <= 3) ) {
// If it's busy, put to the corners.
int count = 0;
do {
x = random.nextBoolean() ? 0 : 2;
y = random.nextBoolean() ? 0 : 2;
count++;
} while ( (!table[y][x].isEmpty()) && (count < 10));
if (count > 9) {
// Put to the remaining cells.
int[][] pair = {{0, 1}, {1, 0}, {1, 2}, {2, 1}};
count = 0;
do {
x = pair[random.nextInt(pair.length)][0];
y = pair[random.nextInt(pair.length)][1];
count++;
} while ( (!table[y][x].isEmpty()) && (count < 10));
}
}
table[y][x].setFigure(nextMoveIsX ? Figure.X : Figure.O);
}
public char checkWinner() {
// Horizontal check
for (int y = 0; y < 3; y++) {
if (isWinnerCombo(table[y][0], table[y][1], table[y][2])) {
strikedMode = MODE_STRIKE_HORIZONTAL | y;
return table[y][0].getFigure();
}
}
// Vertical check
for (int x = 0; x < 3; x++) {
if (isWinnerCombo(table[0][x], table[1][x], table[2][x])) {
strikedMode = MODE_STRIKE_VERTICAL | x;
return table[0][x].getFigure();
}
}
// Diagonal check
if (isWinnerCombo(table[0][0], table[1][1], table[2][2])) {
strikedMode = MODE_STRIKE_DIAGONAL;
return table[0][0].getFigure();
}
if (isWinnerCombo(table[0][2], table[1][1], table[2][0])) {
strikedMode = MODE_STRIKE_DIAGONAL_REVERSE;
return table[0][2].getFigure();
}
// No winner
return Figure.EMPTY;
}
public boolean hasMoreMoves() {
if (checkWinner() != Figure.EMPTY) return false;
int emptyFiguresCount = 0;
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[0].length; j++) {
if (table[i][j].isEmpty()) emptyFiguresCount++;
}
}
return (emptyFiguresCount != 0);
}
private boolean isWinnerCombo(Figure f1, Figure f2, Figure f3) {
if (f1.isEmpty()) return false;
char figure = f1.getFigure();
return ( (figure == f2.getFigure()) &&
(figure == f3.getFigure()) );
}
private char maybeWinnerComboIs(Figure[] array) {
int numX = 0, numO = 0;
for (int i = 0; i < array.length; i++) {
if (!array[i].isEmpty()) {
if (array[i].getFigure() == Figure.X) numX++;
else numO++;
}
}
if (numX == 2) return Figure.X;
if (numO == 2) return Figure.O;
return Figure.EMPTY;
}
private boolean setCompFigure(Figure[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i].isEmpty()) {
array[i].setFigure(Figure.O);
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="33" green="33" red="33" type="rgb"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[480, 150]"/>
</Property>
</Properties>
<Events>
<EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="formMousePressed"/>
<EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="formMouseReleased"/>
<EventHandler event="mouseDragged" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="formMouseDragged"/>
</Events>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-96,0,0,1,-32"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
<Property name="useNullLayout" type="boolean" value="true"/>
</Layout>
<SubComponents>
<Component class="javax.swing.JButton" name="exitButton">
<Properties>
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="new javax.swing.ImageIcon(exitImageBW)" type="code"/>
</Property>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="null"/>
</Property>
<Property name="borderPainted" type="boolean" value="false"/>
<Property name="contentAreaFilled" type="boolean" value="false"/>
</Properties>
<Events>
<EventHandler event="mouseEntered" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exitButtonMouseEntered"/>
<EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="exitButtonMouseExited"/>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="exitButtonActionPerformed"/>
</Events>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
<AbsoluteConstraints x="378" y="2" width="100" height="50"/>
</Constraint>
</Constraints>
</Component>
<Component class="javax.swing.JButton" name="minimizeButton">
<Properties>
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
<Connection code="new javax.swing.ImageIcon(minimizeImageBW)" type="code"/>
</Property>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="null"/>
</Property>
<Property name="borderPainted" type="boolean" value="false"/>
<Property name="contentAreaFilled" type="boolean" value="false"/>
</Properties>
<Events>
<EventHandler event="mouseEntered" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minimizeButtonMouseEntered"/>
<EventHandler event="mouseExited" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="minimizeButtonMouseExited"/>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="minimizeButtonActionPerformed"/>
</Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new javax.swing.JButton()"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
<AbsoluteConstraints x="2" y="2" width="100" height="50"/>
</Constraint>
</Constraints>
</Component>
</SubComponents>
</Form>

View File

@ -0,0 +1,195 @@
package jtictactoe;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author aNNiMON
*/
public class TitlePanel extends JPanel {
private boolean moveForm;
private BufferedImage exitImage, exitImageBW;
private BufferedImage minimizeImage, minimizeImageBW;
private BufferedImage background;
private Point clickedStart;
private final JFrame mainFrame;
private Font messageFont, infoFont;
private int winX, winO;
private String message;
public TitlePanel(JFrame mainFrame) {
this.mainFrame = mainFrame;
background = Util.getImage("/res/title_bg.jpg");
minimizeImage = Util.getImage("/res/minimize_button.png");
minimizeImageBW = Util.getImage("/res/minimize_button_bw.png");
exitImage = Util.getImage("/res/exit_button.png");
exitImageBW = Util.getImage("/res/exit_button_bw.png");
moveForm = false;
messageFont = new Font("Arial", Font.BOLD, 60);
infoFont = new Font("Arial", Font.PLAIN, 30);
winX = winO = 0;
message = "";
initComponents();
}
public void updateWin(int winX, int winO) {
this.winX += winX;
this.winO += winO;
}
public void setMessage(String message) {
this.message = message;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
final int width = background.getWidth();
g.drawImage(background, 0, 0, null);
g.setColor(Color.DARK_GRAY);
g.setFont(infoFont);
g.drawString("X:"+winX, 5, 110);
String win = "O:" + winO;
g.drawString(win, width - getFontMetrics(infoFont).stringWidth(win) - 5, 110);
if (!message.isEmpty()) {
g.setFont(messageFont);
int x = getFontMetrics(messageFont).stringWidth(message) / 2;
x = width / 2 - x;
g.drawString(message, x, 110);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
exitButton = new javax.swing.JButton();
minimizeButton = new javax.swing.JButton();
setBackground(new java.awt.Color(51, 51, 51));
setPreferredSize(new java.awt.Dimension(480, 150));
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
formMousePressed(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
formMouseReleased(evt);
}
});
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
formMouseDragged(evt);
}
});
setLayout(null);
exitButton.setIcon(new javax.swing.ImageIcon(exitImageBW));
exitButton.setBorder(null);
exitButton.setBorderPainted(false);
exitButton.setContentAreaFilled(false);
exitButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
exitButtonMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
exitButtonMouseExited(evt);
}
});
exitButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitButtonActionPerformed(evt);
}
});
add(exitButton);
exitButton.setBounds(378, 2, 100, 50);
minimizeButton.setIcon(new javax.swing.ImageIcon(minimizeImageBW));
minimizeButton.setBorder(null);
minimizeButton.setBorderPainted(false);
minimizeButton.setContentAreaFilled(false);
minimizeButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
minimizeButtonMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
minimizeButtonMouseExited(evt);
}
});
minimizeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
minimizeButtonActionPerformed(evt);
}
});
add(minimizeButton);
minimizeButton.setBounds(2, 2, 100, 50);
}// </editor-fold>//GEN-END:initComponents
private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitButtonActionPerformed
mainFrame.setVisible(false);
mainFrame.dispose();
System.exit(0);
}//GEN-LAST:event_exitButtonActionPerformed
private void minimizeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minimizeButtonActionPerformed
mainFrame.setState(Frame.ICONIFIED);
}//GEN-LAST:event_minimizeButtonActionPerformed
private void exitButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exitButtonMouseEntered
exitButton.setIcon(new ImageIcon(exitImage));
}//GEN-LAST:event_exitButtonMouseEntered
private void exitButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_exitButtonMouseExited
exitButton.setIcon(new ImageIcon(exitImageBW));
}//GEN-LAST:event_exitButtonMouseExited
private void minimizeButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minimizeButtonMouseEntered
minimizeButton.setIcon(new ImageIcon(minimizeImage));
}//GEN-LAST:event_minimizeButtonMouseEntered
private void minimizeButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minimizeButtonMouseExited
minimizeButton.setIcon(new ImageIcon(minimizeImageBW));
}//GEN-LAST:event_minimizeButtonMouseExited
private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed
if (evt.getButton() == MouseEvent.BUTTON1) {
moveForm = true;
clickedStart = evt.getPoint();
}
}//GEN-LAST:event_formMousePressed
private void formMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseReleased
moveForm = false;
}//GEN-LAST:event_formMouseReleased
private void formMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseDragged
if (moveForm) {
Point moved = evt.getLocationOnScreen();
moved.translate(-clickedStart.x, -clickedStart.y);
mainFrame.setLocation(moved);
}
}//GEN-LAST:event_formMouseDragged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton exitButton;
private javax.swing.JButton minimizeButton;
// End of variables declaration//GEN-END:variables
}

25
src/jtictactoe/Util.java Normal file
View File

@ -0,0 +1,25 @@
package jtictactoe;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
/**
*
* @author aNNiMON
*/
public class Util {
public static BufferedImage getImage(String path) {
BufferedImage image = null;
try {
InputStream is = Runtime.getRuntime().getClass().getResourceAsStream(path);
image = ImageIO.read(is);
is.close();
} catch (IOException ex) {
}
return image;
}
}

BIN
src/res/exit_button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
src/res/exit_button_bw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
src/res/minimize_button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/res/o.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/res/striked.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/res/striked_ver.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/res/table_bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
src/res/title_bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
src/res/x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B