januari 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
maj 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
Most Users Ever Online: 694
Currently Online:
345 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
GermanVevy GermanVevy
ytaletkygf ytaletkygf
jtaletaoqg jtaletaoqg
AplusMotHQ AplusMotHQ
WileysitZI WileysitZI
ppu-pro_bewRG ppu-pro_bewRG
MichaeldalIL MichaeldalIL
WilliamWotQI WilliamWotQI
FuriousBraw FuriousBraw
UbvpwcgatKX UbvpwcgatKX
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967
Member Stats:
Guest Posters: 2
Members: 78407
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL