January 26, 2008
Hej, gör ett väldigt basic ritprogram i Java. Man styr med WASD och då placerar den ut ett X i terminalen, väldigt enkelt. Dock så när jag ska byta riktning så fördröjs det och den skickar ett X i den gamla angivna riktningen. Som sagt, hjälp uppskattas!
Operativ systemet är Linux om det gör någon skillnad.
EDIT: Tror caseraderna med kapitala bokstäver inte fungerar, så mata in med små.
import java.io.IOException;
//import System.in.read;
public class rita{
static char readchar(){
int ch;
try {
do {
ch=System.in.read();
} while (ch < 0);
}
catch (IOException exception) {
System.out.println("an IO error occured");
return (char) 4; /* end of file */
}
return (char) ch;
}
public static void main(String[] args){
int xpos = 25, ypos = 25;
char ESC = (char)27;
String CSI = Character.toString(ESC) + '[';
boolean forts = true;
System.out.println("Använd WASD för att rita och tryck Q för att avsluta.");
System.out.println(CSI+"4l");
do{
char WASD = readchar();
System.out.print(CSI +21 +';' +4 +'H'+"Got char:"+WASD);
switch(WASD){
case 'Q':
forts = false;
break;
case 'W':
System.out.print(CSI +ypos-- +';'+xpos++ +'H'+"X");
break;
case 'A':
System.out.print(CSI +(ypos-2) +';'+xpos+'H'+"X");
break;
case 'S':
System.out.print(CSI +ypos++ +';'+xpos++ +'H'+"X");
break;
case 'D':
System.out.print(CSI +ypos++ +';'+xpos+'H'+"X");
break;
case 'q':
forts = false;
break;
case 'w':
System.out.print(CSI +ypos-- +';'+xpos +'H'+"X");
break;
case 'a':
System.out.print(CSI +ypos+';'+xpos-- +'H'+"X");
break;
case 's':
System.out.print(CSI +ypos++ +';'+xpos+'H'+"X");
break;
case 'd':
System.out.print(CSI +ypos+ ';'+xpos++ +'H'+X);
break; }
}while (forts);
}
}
Och filen jag gör kör filen med är:
#.SECONDARY : %.class
# Denna fil kompilerar och kör tex MittProgram.java
# om du skriver: make MittProgram
%.class : %.java
javac $<
# Här räknar du upp andra program ditt program behöver
% : %.class Keyboard.class
rlwrap java $*
# Här räknar du upp andra program ditt program behöver
rita : rita.class Keyboard.class
stty raw -echo
java rita
stty cooked +echo
May 8, 2001
Felet är att du räknar upp x- och y-position efter du använt dem.
Låt säga att xpos = 10 och du använder xpos++ så blir det 10 men EFTER användandet har xpos värdet 11.
Lösning är helt enkelt att byta sida på din upp- och nedräkningar:
xpos++ -> ++xpos osv
Kodexempel:
---------------
int x = 10;
System.out.println(x++); Skriver ut 10
System.out.println(x); Skriver ut 11
jämför det med:
int x = 10;
System.out.println(++x); Skriver ut 11
System.out.println(x); Skriver ut 11
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
1 Guest(s)