Tekst wyświetlany w losowych miejscach - brak losowości

Tekst wyświetlany w losowych miejscach - brak losowości
1

[właśnie chciałem poprawić text, ale trafił do kosza :/, sformatowałem kod z użyciem dołączonego programu, tagów goto nie chce na razie usuwać bo boje się że coś mi się pomiesza :D, mam nadzieję że teraz jest dobrze, jak nie to poprawię]
Wraz z kolegą, piszemy program, którego celem jest wypisywanie tekstu w losowych miejscach na ekranie, problem jest w tym, że tekst pojawia się tylko w jednym miejscu i od czasu do czasu mignie. Wiem jest błąd że i nie jest inkrementowane a pętla for zamiast sprawdzać jednocześnie x i y sprawdza tylko x, ale poprawa tego nic nie dała ^^. Gdzie popełniliśmy błąd?

Kopiuj
program losowytekst;

uses
  Crt;

var
  x, y, i, k, f : integer;
var
  x_bylo : array [1..250] of integer;
var
  y_bylo : array [1..250] of integer;
label
  1, 2, 3, 4;
begin
  WriteLn('TEXT IN RANDOM PLACE');
  WriteLn('Authors: Robert Niemiec & Bartosz Hnat');
  WriteLn('Press [ENTER] to start...');
  ReadLn;
  i := 0;
  Randomize;
  repeat
    clrscr;
    1:
    begin
      {Losuj X}
      x := Random(480);
      x_bylo[i] := x;
      if (i <> 0) then
        goto 3;
    end;
    2:
    begin
      {Losuj Y}
      y := Random(680);
      y_bylo[i] := y;
      if (i <> 0) then
        goto 3;
    end;
    3:
    begin
      for k := 1 to 480 do
        if (x = x_bylo[k]) then
          goto 1
        else
          goto 4;
      for f := 1 to 680 do
        if (y = y_bylo[k]) then
          goto 2
        else
          goto 4;
    end;
    4:
    begin
      gotoxy(x, y);
      textcolor(Random(16) + 1);
      Write('Fuck you world');
      gotoxy(x, y);
      delay(100);
      if (keypressed = True) then
      begin
        break;
      end;
    end;
  until keypressed;
  ReadLn;
end.
edytowany 1x, ostatnio: flowCRANE
olesio
No sformatowane. I co nie bolało? :) Teraz zgodnie z poprzednią odpowiedzią. Pozbądź się goto.
flowCRANE
"właśnie chciałem poprawić text, ale trafił do kosza" - jako anonim i tak byś nie mógł nic poprawić;
m_Lesiu
to label może być cyfrą ? ale fajno :D
flowCRANE
@TLesiu - ani bym nawet nie przypuszczał; No ale praktycznie nigdy nie korzystałem z etykiet, więc nie miałem jak tego poznać dokładniej :D
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12152
0

No to po raz drugi - jeżeli to nie jest ćwiczenie z używania instrukcji GoTo, to pozbądź się ich, a wrócimy do rozmowy;

Poza tym podziel sobie kod na procedury i funkcje, a będzie o wiele czytelniejszy i łatwiej będzie Ci się w nim połapać; Teraz jest i tak nieczytelny, bo wszystko jest na kupę, a do tego te skoki do etykiet... które i tak powinny się nazywać sensowniej, a nie liczbowo...


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
0

Dobra, i tak już nasze dane są publiczne bo w 1 poście są również, więc usuwam goto ^^

Kopiuj
program losowytekst;
 
uses
  Crt;
 
var
  x, y, i, k, f : integer;
begin
  WriteLn('TEXT IN RANDOM PLACE');
  WriteLn('Authors: Robert Niemiec & Bartosz Hnat');
  WriteLn('Press [ENTER] to start...');
  ReadLn;
 
  Randomize;
  repeat
    clrscr;

    begin
      {Losuj X}
      x := Random(480);
      x_bylo[i] := x;
     
    end;
    
    begin
      {Losuj Y}
      y := Random(680);
      y_bylo[i] := y;
     
    end;
  
   begin
      gotoxy(x, y);
      textcolor(Random(16) + 1);
      Write('Fuck you world');
      gotoxy(x, y);
      delay(100);
      if (keypressed = True) then
      begin
        break;
      end;
    end;
  until keypressed;
  ReadLn;
end.
0
furious programming napisał(a):

No to po raz drugi - jeżeli to nie jest ćwiczenie z używania instrukcji GoTo, to pozbądź się jej, a wrócimy do rozmowy.

To nie jest właściwie ćwiczenie tylko projekt prywatny, użyłem GoTo bo wydawało mi się że to korzystne

olesio
Goto na pewno nie jest korzystne, pogoogluj sobie i poczytaj dlaczego.
0

Nie usunąłem identyfikatorów tablic, które skasowałem :D

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12152
0

GoTo raczej nie jest korzystne - są przecież warunki i jest możliwość wydzielania kodu do procedur i funkcji, więc bez problemu można z nich korzystać; Poza tym masz problem tutaj:

Kopiuj
textcolor(Random(16) + 1);

Ta instrukcja wylosuje liczbę z przedziału 1 .. 16, a kolorów jest 16, gdzie ostatni ma wartość 15 - to kolor biały; Jest jeszcze jedna wartość dla koloru, tzw. Blink, ale nie pamiętam jaką ma wartość w Turbo Pascalu; Natomiast w bibliotece standardowej dla FPC ma wartość 128;

Inna sprawa, że zmiennej x_bylo i y_bylo nie są zadeklarowany w Twoim ostatnim kodzie, więc przy próbie kompilacji dostaniesz błędy;

Wspomnę jeszcze o tym, że losujesz współrzędne z jakichś dziwnych zakresów - konsola nie posiada ani szerokości 480 znaków, ani tym bardziej wysokości 680 linii, więc to musisz poprawić; Typowy rozmiar konsoli pod WinXP to 80x25, więc z takich przedziałów powinieneś losować; Zwróć jednak uwagę, że jeżeli chodzi o współrzędną X, to podczas losowania musisz uwzględnić długość wyświetlanego łańcucha - w przeciwnym razie tekst (bardzo brzydki) będzie zawinięty do nowej linii, a tego raczej chciałbyś uniknąć.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
0
furious programming napisał(a):

Poza tym podziel sobie kod na procedury i funkcje

Rozrysuje może algorytm działania każdej funkcji a potem przełożę na kod Pascala

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Czemu nie zrobić po ludzku? To cały program:

Kopiuj
uses Crt;

const Msg:String='Losowe miejsce';
begin
  while not keypressed do
  begin
    TextColor(1+Random(15));
    GotoXY(1+Random(79-Length(Msg)),1+Random(19));
    Write(Msg+StringOfChar(#8,Length(Msg)));
    Delay(500);
    Write(StringOfChar(' ',Length(Msg)));
  end;
end.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0
furious programming napisał(a):

GoTo raczej nie jest korzystne - są przecież warunki i jest możliwość wydzielania kodu do procedur i funkcji, więc bez problemu można z nich korzystać; Poza tym masz problem tutaj:

Kopiuj
textcolor(Random(16) + 1);

Ta instrukcja wylosuje liczbę z przedziału 1 .. 16, a kolorów jest 16, gdzie ostatni ma wartość 15 - to kolor biały; Jest jeszcze jedna wartość dla koloru, tzw. Blink, ale nie pamiętam jaką ma wartość w Turbo Pascalu; Natomiast w bibliotece standardowej dla FPC ma wartość 128;

Inna sprawa, że zmiennej x_bylo i y_bylo nie są zadeklarowany w Twoim ostatnim kodzie, więc przy próbie kompilacji dostaniesz błędy.

Właśnie zapomniałem tych zmiennych usunąć :/
Właśnie mi kolega mówił, że jeden kolor jest czarny i to 1 dodałem aby nie wylosowało czarnego właśnie

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12152
0

Właśnie mi kolega mówił, że jeden kolor jest czarny i to 1 dodałem aby nie wylosowało czarnego właśnie

No i dobrze zrobiłeś, tyle że zapomniałeś zmniejszyć zakres przy losowaniu, aby po dodaniu tego 1 nie otrzymać wartości większej, niż maksymalna (czyli 15);

Ogólna zasada jest prosta - Random(Max - Offset) + Offset.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
0

Ok spróbujemy

0

Problem rozwiązany

Kopiuj
program losowytekst;
uses Crt;
var x,y,i,k,f: Integer;
var x_bylo: array [1..80] of Integer;
var y_bylo: array [1..25] of Integer;
label 1,2,3,4;
begin
WriteLn('TEXT IN RANDOM PLACE');
WriteLn('Authors: Robert Niemiec & Bartosz Hnat');
WriteLn('Press [ENTER] to start...');
ReadLn;
i := 0;
Randomize;
repeat
clrscr;
1:
begin
{Losuj X}
x := Random(80);
x_bylo[i] := x;
if(i <> 0) then goto 3;
end;
2:
begin
{Losuj Y}
y := Random(25);
y_bylo[i] := y;
if(i <> 0) then goto 3;
end;
3:
begin
for k := 1 to 80 do
if(x = x_bylo[k]) then goto 1 else goto 4;
for f := 1 to 25 do
if(y = y_bylo[k]) then goto 2 else goto 4;
end;
4:
begin
gotoxy(x,y);
textcolor(Random(16)+1);
Write('text');
gotoxy(x,y);
Sound(Random(5000));
delay(100);
if(keypressed = true) then
begin
NoSound;
break;
end;
end;
until keypressed;
end.

Przepraszam za brak formatowania ale piszę z komputera szkolnego ^^

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0
_13th_Dragon
Takie stwierdzenie jest wystarczającym powodem aby nie zaliczyć semestr.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12152
0

@zimny Kot - nadal widzę wszechobecne GoTo :]

Poćwicz sobie i skróć ten kod - pozbądź się tych etykiet i sformatuj kod porządnie, bo póki co przez etykiety i brak formatowania jest bardzo nieczytelny.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
babubabu
Ważne, że działa :D Chyba mamy okazję poznać nowego pracownika microsoftu.
flowCRANE
Niech się uczy - później łatwiej będzie mu się dopasować do współpracowników ;P
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)