Cześć, potrzebuję stworzyć grę Asteroidy. Napisałem kod na Widnowsie, ale po przepisaniu na Linuxa plansza źle się generuje. Wyświetlają się obiekty, ale są nie poukładane i wszędzie jest "/n".
Przejrzałem kod z 5 razy ale nic nie znalazłem. Może Wam się uda ;)
A oto kodzik:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include "KBHIT.c"
#include "conio.h"
int main(int argc, char *argv[])
{
int sizey=23;
int sizex=40;
int x, y,yi;
char world[sizey][sizex];
char gracz = 'A';
char strzal = '^';
char asteroida = 'O';
char eksplozja = 'X';
int punkty = 0;
int wygrana = 1;
int gotowoscStrzalu = 1;
int gotowoscAsteroidy = 0;
srand(time(NULL));
/*intro*/
printf("\n \n Gra Asteroidy \n \n \n \n ");
sleep(1);
printf(" Przebij sie przez pas asteroid aby przezyc ! \n \n \n \n");
sleep(2);
printf(" Powodzenia ! \n \n \n \n");
sleep(1);
printf(" Aby zaczac nacisnij dowolny przycisk...");
getch();
/*inicjowanie swiata*/
int ogolneAsteroidy = 0;
for (x=0; x<sizex; ++x){
for (y=0;y<sizey; ++y){
if ((y+1) % 2 == 0 && y<7 && x>4 && x< sizex - 5 && x % 2 == 0){
world[y][x] = asteroida;
ogolneAsteroidy ++;
}
else {
world[y][x] = ' ';
}
}
}
world[sizey-1][sizex /2] = gracz;
int i =1;
char kierunek = 'l';
char keyPress;
int aktualneAsteroidy = ogolneAsteroidy;
while (aktualneAsteroidy > 0 && wygrana){
int drop = 0;
int predkoscAsteroidy = 1 + 10 * aktualneAsteroidy / ogolneAsteroidy;
gotowoscStrzalu ++;
/*wyswietanie*/
system("clear");
printf (" Punkty: %d", punkty);
printf("/n");
for (y=0 ; y < sizey ; ++y){
printf("|");
for (x=0; x< sizex ; ++x){
printf("%c", world[y][x]);
}
printf("|");
printf("/n");
}
/*wystrzal*/
for (x=0; x<sizex; ++x) {
if (world[y][x]==strzal && world[y-1][x] == asteroida){
world[y][x] = ' ';
world[y-1][x] = eksplozja;
aktualneAsteroidy --;
punkty = punkty + 50;
}
else if (world[y][x]==eksplozja){
world[y][x] = ' ';
}
else if ((i+1) % 2 == 0 && world[y][x] == asteroida && world[y+1][x] == gracz){
world[y+1][x] = eksplozja;
world[y][x] = ' ';
wygrana = 0;
}
}
/*aktualizacja pozycji asteroid */
for (y=0; y< sizey; ++y){
if (world[y][0] == asteroida){
kierunek = 'r';
drop = 1;
break;
}
if (world[y][sizex-1] == asteroida){
kierunek = 'l';
drop = 1;
break;
}
}
/*aktualizacja planszy*/
if (i % predkoscAsteroidy == 0){
if(kierunek == 'l'){
for (x=0; x< sizex-1; ++x){
for (y=0; y<sizey; ++y){
if (drop && (world[y-1][x+1] == asteroida)){
world[y][x] = world[y-1][x+1];
world[y-1][x+1] = ' ';
}
else if (!drop && (world[y][x+1] == asteroida)){
world[y][x] = world[y][x+1];
world[y][x+1] = ' ';
}
}
}
}
else {
for (x = sizex; x > 0; --x){
for (y=0; y< sizey; ++y){
if (drop && (world[y-1][x-1] == asteroida)){
world[y][x] = world[y-1][x-1];
world[y-1][x-1] = ' ';
}
else if (!drop && (world[y][x-1] == asteroida)){
world[y][x] = world[y][x-1];
world[y][x-1] = ' ';
}
}
}
}
for (x = 0; x < sizex; ++x){
if (world[sizey-1][x] == asteroida){
wygrana = 0;
}
}
}
/*kontrola*/
if(kbhit()){
keyPress = getch();
}
else {
keyPress = ' ';
}
if (keyPress == 'a'){
for(x = 0; x< sizex; x=x+1){
if(world[sizey-1][x+1]==gracz){
world[sizey-1][x] = gracz;
world[sizey-1][x+1]= ' ';
}
}
}
if (keyPress == 'd'){
for(x=sizex -1; x>0;x=x-1){
if(world[sizey-1][x-1]==gracz){
world[sizey-1][x] = gracz;
world[sizey-1][x-1]= ' ';
}
}
}
if (keyPress == 'm' && gotowoscStrzalu > 2){
for(x=0; x<sizex;x=x+1){
if(world[sizey-1][x]==gracz){
world[sizey-2][x] = strzal;
gotowoscStrzalu=0;
}
}
}
i++;
usleep(50);
}
system("clear");
printf(" Punkty : %d", punkty);
printf("\n");
for (y=0;y<sizey;y++){
printf("|");
for (x=0;x<sizex;x++){
printf("%c",world[y][x]);
}
printf("|");
printf("\n");
}
sleep(1);
system("clear");
if(wygrana != 0){
printf("\n\n\n\n\n\n Gratulacje !!! \n\n\n\n\n");
sleep(1);
printf("\n\n Punkty: %d", punkty);
sleep(1);
int bonus = ogolneAsteroidy*20 - i;
printf("\n\n Bonus: %d",bonus);
sleep(1);
printf("\n\n Cakowity Wynik: %d", punkty+bonus);
getch();
}
else{
printf("\n\n\n\n\n\n Przegrales :(");
sleep(1);
printf("\n\n\n\n\n\n Twoj wynik: %d", punkty);
getch();
}
}