Cześć,mam kolejny problem z sudoku.
Próbuję napisać algorytm który przekaże wszystkie wykorzystanie już cyfry w poziomie,pionie,i kwadracie.
Pole.java
package Gry.Sudoku;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Pole extends JButton
{
public int[] niemozliwe = new int[]{0,0,0,0,0,0,0,0,0};
public int locked = 0;
public int pozycjaI;
public int pozycjaJ;
public int value = 0;
public int kwadrat;
public Pole()
{
setPreferredSize(new Dimension(50,50));
}
public void setValue(int v)
{
value = v;
if (v == 0)
setText("");
else
for(int i = 0;i < niemozliwe.length;i++)
{
if (niemozliwe[i] != v);
{ setText(Integer.toString(v));
return;
}
}
}
void setLocked(int l)
{
locked = l;
}
}
Funkcje i zmienne nazywam po swojemu,i dlatego wszystko wytłumaczę.
niemozliwe - przechowuje wykorzystane cyfry(jak już wspominałem);
locked - 1 zablokowane,0 odblokowane;ale to NIE MA tutaj znaczenia ;-)
pozycjaI,pozycjaJ - "I" i "J" żeby sobie ułatwić pracę - najpierw pętla z "I",potem pętla z "J".
value - no wiadomo wartość pola(nie pobieramy z "getText()"),0 puste
kwadrat - określa w którym kwadracie znajduje się pole(0 - pierwszy kwadrat)
setValue(int v) - ustawia wartość(nie róbcie po prostu "value = 7",ale "int temp = value" już można ;-) ) , tu coś pokręciłem chciałbym żeby jeśli podana liczba(v) jest w niemożliwych to wtedy się ustawia v+1,chyba że znowu liczba jest w niemożliwych.
Plansza.java
package Gry.Sudoku;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Plansza extends JPanel implements MouseListener
{
public Color kolorPlanszy = Color.ORANGE;
public Color kolorKwadratu = Color.GREEN;
JPanel[] plansze = new JPanel[9];
public int[][] stan = new int[9][9];
public Plansza()
{
setLayout(new GridLayout(3,3,10,10));
setBackground(kolorPlanszy);
for(int i = 0;i < 9;i++)
{
plansze[i] = new JPanel();
plansze[i].setLayout(new GridLayout(3,3,5,5));
plansze[i].setBackground(kolorKwadratu);
for(int j = 0;j < 9;j++)
{
Pole p = new Pole();
p.pozycjaI = i;
p.pozycjaJ = j;
p.kwadrat = i;
p.addMouseListener(this);
plansze[i].add(p);
}
add(plansze[i]);
}
}
public void actionPerformed(ActionEvent e)
{
}
public void mousePressed(MouseEvent e)
{
Pole p = (Pole)e.getSource();
if (p.value == 9)
p.setValue(0);
else
p.setValue(p.value + 1);
stan[p.pozycjaI][p.pozycjaJ] = p.value;
p.niemozliwe = getNieMozliwe(p);
}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
int[] getNieMozliwe(Pole p)
{
int[] niemozliwe = p.niemozliwe;
int[] temp = new int[9];
for(int j = 0;j < 9;j++)
{
temp[j] = stan[p.pozycjaI][j];
}
for(int j = 0;j < 9;j++)
{
if (temp[j] != 0)
niemozliwe[j] = temp[j];
}
return niemozliwe;
}
}
actionPerformed - potem wyrzucę(zostało bo na początku był ActionListener)
getMozliwe - tu właśnie proszę o pomoc mi z algorytmem... zwraca liczby w pionie,poziomie,i kwadracie(z wyjątkiem zera),coś zacząłem,ale lepiej to skasować.
Jak uznacie że są jakieś inne błędy to piszcie ;-)
Pomóżcie z algorytmem