Threads Tic Tac Toe mit Threads

teamplay56

Neues Mitglied
(PS:Als Anhang ist ein Tic Tac Toe Beispiel mitgegeben )
Ich lerne momentan Java also entschuldigt mir Fehler 🙂

Also wir schreiben bald eine Klausur und dort wird so etwas in etwa drankommen , das Problem ist das ich nicht weiß wie ich ein Thread in einem Programm hinzufügen kann . (Theoretischen Aufbau sowie funktion ist mir bewusst ) . Ihr werdet euch jetzt fragen was ich hier dann überhaupt will , ich lerne am besten wenn ich mir ein Beispiel anschaue oder jemand mir es mit einem Beispiel erklären kann und somit habe ich mich auf die Suche nach einen Programm zur verständigung gemacht . Das war leider nicht möglich zu finden und jetzt bin ich hier 🙂

Mein Traum wäre es wenn einer zB die Uhrzeit oder die Zeit des Spieles in einem Thread hinzufügen kann bzw mir im zusammenhang mit diesem Umfasenden Programm erklären kann wie dies möglich ist (ich hoffe das kommt jetzt nicht so rüber als ob ich will das andere meine Arbeit machen ) .

Ich bedanke mich im vornherein für diejenigen die mir helfen konnten und sich die kurze Zeit genommen haben 🙂
Edit :
Da ich weder eine .rar noch .java dateien hochladen kann ( fragt mich nicht warum ) hoffe ich das ich wenigstens die Erlaubnis habe ein Link zu einer Download Seite zu posten wo das schon angesprochene Tic Tac Toe programm herunterladbar ist .
https://www.file-upload.net/download-13141979/ticeinfach.rar.html
In dieser .rar datei befinden sich lediglich .java dateien ..
Es tut mir leid wegen den Umständen doch dies ist mir sehr wichtig .

Grüße
 
Thread ist ein weitläufiger Begriff. Möchtest du das im Kontext von UI machen?
Dann hab ich vor langer, langer Zeit eine Uhr gebastelt (mit einem Timer/Thread).
Ich hab das mal ein wenig "modernisiert" und hilft dir vielleicht weiter:
Java:
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.WindowConstants;
import java.awt.BasicStroke;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;

public class Test {
  public static void main(String... args) {
    JFrame frame = new JFrame("Clock");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setLocationByPlatform(true);
    
    frame.add(new Clock());
    frame.setVisible(true);
  }
}

class Clock extends JComponent {
  private static final double SECOND_RATION = 0.9d;
  private static final double MINUTE_RATION = 0.8d;
  private static final double HOUR_RATION = 0.6d;
  
  private LocalTime time = LocalTime.now();
  
  public Clock() {
    new Timer(200, e -> setTime(LocalTime.now())).start();
  }
  
  public void setTime(LocalTime time) {
    this.time = time;
    repaint();
  }
  
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
    g2d.drawOval(getX(), getY(), getWidth(), getHeight());
    
    int midX = (getWidth() - getX()) / 2 + getX();
    int midY = (getHeight() - getY()) / 2 + getY();
    
    drawHourHand(midX, midY, g2d);
    drawMinuteHand(midX, midY, g2d);
    drawSecondHand(midX, midY, g2d);
    
    drawDigital(midX, midY, g2d);
  }
  
  private void drawDigital(int midX, int midY, Graphics2D g2d) {
    FontMetrics fontMetrics = g2d.getFontMetrics();
    int offset = midY / 2 - fontMetrics.getHeight() / 2;
    String now = time.truncatedTo(ChronoUnit.SECONDS).format(DateTimeFormatter.ISO_LOCAL_TIME);
    int stringWidth = fontMetrics.stringWidth(now);
    
    g2d.drawString(now, midX - stringWidth / 2, midY + offset);
  }
  
  private void drawHourHand(int x, int y, Graphics2D g2d) {
    drawHand(x, y, g2d, ChronoField.HOUR_OF_AMPM, HOUR_RATION, 3);
  }
  
  private void drawMinuteHand(int x, int y, Graphics2D g2d) {
    drawHand(x, y, g2d, ChronoField.MINUTE_OF_HOUR, MINUTE_RATION, 2);
  }
  
  private void drawSecondHand(int x, int y, Graphics2D g2d) {
    drawHand(x, y, g2d, ChronoField.SECOND_OF_MINUTE, SECOND_RATION, 1);
  }
  
  private void drawHand(int x, int y, Graphics2D g2d, ChronoField temporalField, double ratio, int strokeWidth) {
    int value = time.get(temporalField);
    
    double alpha = 360d * value / (temporalField.range().getMaximum() + 1);
    
    double vecX = Math.sin(Math.toRadians(alpha));
    double vecY = -Math.cos(Math.toRadians(alpha));
    
    g2d.setStroke(new BasicStroke(strokeWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
    
    g2d.drawLine(x, y, (int) (vecX * getWidth() / 2 * ratio + x), (int) (vecY * getHeight() / 2 * ratio + y));
  }
}
 

Zurück
Oben