Gra statki - jakiego komponentu użyć do zrobienia siatek pól

Gra statki - jakiego komponentu użyć do zrobienia siatek pól
SJ
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Bielsko-Biała
  • Postów:11
0

Witam.
Potrzebuję zrobić grę w Lazarusie - statki. Szukam komponentu który odzwierciedliłby mi pole gracza i pole komputera.
Myślałem wstawić...200 TShapeów obok siebie ale to byłoby beznadziejne.

spartanPAGE
od kiedy 10x10 to 200? O_O
flowCRANE
@spartanPAGE - znasz grę w statki? Są w niej dwa pola - jedno z własnym poledkiem, drugie z przeciwnika, stąd 2 * 10 * 10 = 200 ;)
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
2

Wystarczy jeden PaintBox, rysujesz sam co zechcesz.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Tuchów
  • Postów:12163
0

Dodam tylko, że jeśli nie chcesz lub nie umiesz tego zrobić w TPitureBox to możesz wykorzystać TStringGrid i własne rysowanie.


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.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Wystarczy TPanel oraz jakiś silnik obsługujący OpenGL*; jako handle do silnika podajesz handle kontrolki i voilà.
* nie jestem pewien, czy DirectX również na takie rzeczy pozwala.


flowCRANE
Założysz się, że pytacz już w tym wątku nie odpisze? :D
Patryk27
Nie musiałeś go od razu zabijać :C
flowCRANE
Ja?! A kto wyskoczył z OpenGL? :P
PD
  • Rejestracja:ponad 22 lata
  • Ostatnio:41 minut
0

pobierz pakiet BGRAControls, jest tam komponent (wraz z przykładem) BCGameGrid: http://wiki.freepascal.org/BGRAControls#BCGameGrid


pozdrawiam
paweld
SJ
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Bielsko-Biała
  • Postów:11
0

Próbowałem z tym TPaintBox i jakoś mi nie chce działać. Mam taką procedurę:

Kopiuj
procedure Draw;
begin
  Form1.PaintBox1.Canvas.Pen.Color:=clRed;
  Form1.PaintBox1.Canvas.MoveTo(200, 200);
  Form1.PaintBox1.Canvas.LineTo(100, 100);
  Form1.PaintBox1.Update;
end;

i w momencie wywołania jej na TPaintBox'ie widzę na 0,1 sekundy czerwoną linię. Tak to TPaintBox jest pusty. w OpenGL'u ciężko będzie to zrobić. Dlatego najpierw skorzystam z najprostszych rozwiązań (pobawię się trochę TStringGrid'em)

Patryk27
Nikt nie mówi o pisaniu w czystym OpenGL-u. Np.silnik ZenGL posiada wbudowane funkcje pr2d_line, pr2d_rect itp. (o ile nie pomyliłem się w nazwie). :P
SJ
Mówię ogólnie o narzędziach tego typu podobnych
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0
Kopiuj
procedure TForm1.PaintBox1OnPaint(Ovner:TCOmponent); // podpiąć pod zdarzenie
begin
  PaintBox1.Canvas.Pen.Color:=clRed;
  PaintBox1.Canvas.MoveTo(200, 200);
  PaintBox1.Canvas.LineTo(100, 100);
end;

procedure Draw;
begin
  Form1.PaintBox1.Invalidate;
end;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
SJ
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Bielsko-Biała
  • Postów:11
0

@_13th_Dragon, dzięki za kod.
Bawiłem się TStringGridem i powiem, że w ogóle nie nadaje się do tego.
Został TPaintBox, nigdy w tym nie rysowałem więc, napisałem to tak:

Kopiuj
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  Draw;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  iType := 0;
  PaintBox1.Invalidate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  iType := 1;
  PaintBox1.Invalidate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  iType := 2;
  PaintBox1.Invalidate;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  iType := 3;
  PaintBox1.Invalidate;
end;

procedure Draw;
begin

  if iType = 1 then
  begin
  Form1.PaintBox1.Canvas.Pen.Color := clRed;
  Form1.PaintBox1.Canvas.LineTo (20, 30);
  end else if iType = 2 then
  begin
  Form1.PaintBox1.Canvas.Pen.Color := clGreen;
  Form1.PaintBox1.Canvas.LineTo (40, 50);
  end else if iType = 3 then
  begin
  Form1.PaintBox1.Canvas.Pen.Color := clBlack;
  Form1.PaintBox1.Canvas.LineTo (50, 60);
  end else
  begin
  Form1.PaintBox1.Canvas.Pen.Color := clBlue;
  Form1.PaintBox1.Canvas.LineTo (70, 80);
  end;

end; 

Kod mniej więcej "działa". Pytanie da się jakoś to uprościć? Czy to jest dobrze napisane?
Czego potrzebuję:
Program musi narysować plansze: statków gracza i trafień.
Mogę "jakoś" użyć zdarzenia OnClick na PaintBox'ie i odczytywać współrzędne kursora zdarzeniem onMouseMove co pozwoliłoby mi na interakcję - głupie rozwiązanie i trudne ale da się napisać.
Muszę planszę zmieniać, czyli rysować prawie to samo, ale np. za drugim razem z wypełnionym na niebiesko jednym polem w planszy.

flowCRANE
Zastosuj case .. of i tablice, a skrócisz rysowanie do dwóch instrukcji; Możesz też przyciskom nadać Tag równy iType i przypisać im wspólne zdarzenie OnClick;
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Zrobisz jak będziesz uważał. Ale jeżeli nie chcesz używać silników, co polecił Tobie @Patryk27, a robić to pod czystym Delphi. To oczywiscie można się męczyć PaintBoxem, ale nie wiem dlaczego przy braku wiedzy, upierasz się na niego, zamiast na zasugerowany wcześniej również TStringGrid. Jakie są jego plusy? Otóż że poza tym, iż łatwo sobie rysujesz "wodę", statek trafiony albo chybiony strzał, chocby: http://stackoverflow.com/questions/9924259/inserting-image-in-stringgrid-cell - gdzie wiadomo zamiast grafiki z TImage podstawiamy jakąś z zasobów. A poza swobodnym niemal rysowaniem komórek StringGrida posiada on jeszcze własności Objects. To daje Tobie możliwosć utworzenia jakiejś klasy bazowej na przykład TGameField, która obsłuży w przyszłosci wyswietlanie grafiki trafien i innej, odtwarzanie dźwięków (ja bym takie coś przewidział, co komu dzisiaj z niemej gry, a tak pakujemy sobie bass.dll do zasobów, używamy dllloader.pas, o ktorym niedawno pisałem tutaj przy okazji wątku o dołączeniu i korzystaniu z dllki do zosobów exeka i jazda) i reakcje gry na to czy już zatopiono nasze lub przeciwnika statki. I tak dalej. Tak bym kombinował. A i widze, że to chyba po raz kolejny odświeżenie tematu pisania gry "Statki" w Delphi. I tak się zastanawiam czy to na prawdę aż tak trudne zadanie. Wydaje mi się, że po przemyśleniu tematu jest to do ogarnięcia, a schody mogą się zacząć dopiero przy eleganckim obsłużeniu gry sieciowej czy implementacji sztucznej inteligencji CPU, o ile taką planujesz. A tak do testów na szybko z losowym celowaniem komputera to po prostu usiąść, pomyśleć i to napisać, nie mnożąć sobie zbędnie problemów na zaś :)


Pozdrawiam.
edytowany 1x, ostatnio: olesio
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0
olesio napisał(a):

To oczywiscie można się męczyć PaintBoxem, ale nie wiem dlaczego przy braku wiedzy, upierasz się na niego, zamiast na zasugerowany wcześniej również TStringGrid.

@olesio, bardzo przepraszam ale chrzani waść. Co może być prostsze od PaintBox'a?
Ot całe rysowanie:

Kopiuj
procedure TForm1.PaintBoxPaint(Sender: TObject);
var y,x:Integer;
begin
  for y:=0 to 9 do for x:=0 to 9 do ImageList.Draw(PaintBox.Canvas,x*32,y*32,Tb[y,x]);
end;

StringGrid nawet się nie umywa.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

No można i tak. Teraz doczytałem, że to Lazarus, więc odpadają moje porady o takim użyciu bass.dll z zasobów, bo za pewne się okaże, że tam ten moduł jak to Lazarus ma w zwyczaju nie być kompatybilnym wstecz, nie zadziała. Ale nie sprawdzałem, więc i mozę się da jak nie tym, to innym. W sumie można mieć też i dwie tablice 10x10 na trzymanie obiektów do obsługi pola gry. Po prostu mi się wydawało, że pod TStringGrid to zrobić łatwiej. Tylko pytający nie zrobił chyba jeszcze nic i kombinuje z tą grą jak nie wiem z czym, zamiast przysiąść i zaprogramować to. A ja, że śmiałem polecić TStringGrid, to zaraz "chrzanie". Tylko już nieraz było tak, że ktoś na forum o coś spyta z tematyki Lazarus / Pascal / Delphi, to mimo iż mija kilkadziesiąt minut, a nie jest ani późno w nocy, ani wcześnie nad ranem, a i ja nie mam codziennie wolnego, to jakoś mogę odpisać. Najlepiej jest zwkleać z odpowiedzią, a innym zarzucać chrzanienie. Teraz to nie będe pisał nic, wątki będą bez odpowiedzi, a każdy kto podważy opinie Dragona będzie chrzanił. Niezłych czasów doczekaliśmy.


Pozdrawiam.
_13th_Dragon
Ja odniosłem się do jednego konkretnego zdania. Jak uważasz że jednak z TStringGrid'em jest prościej to podaj odpowiedni kod rysujący. A tak ostro się wyraziłem bo wg mnie ewidentnym jest że czajnik będzie lepszy do parzenia herbaty niż patelnia, a PaintBox lepszy do rysowania niż StringGrid.
olesio
Przykładową metodę rysującą w komórkach stringgrida podałem. I wedle mojej wiedzy łatwiej też obsłużyć klikanie i zaznaczanie konkretnej z komórek. Ale pewnie znowu chrzanie.
_13th_Dragon
Zaznaczanie nie jest potrzebne w tej grze, klikanie w StringGrid trzeba odjąć np: ARow-1, w Paintbox trzeba podzielić np: Y div 32 no można uznać że trudniej bo div to trudne słowo ;P
szopenfx
  • Rejestracja:ponad 20 lat
  • Ostatnio:4 miesiące
0

To może i ja coś od siebie dorzucę :P
W załączniku jest edytor poziomów do ramake'a gry Tower of The Sorcerer dla canvas HTML5.

Edytor był pisany w Delphi 5 na szybko do własnego użytku (w grze jest tylko 50 poziomów), ale możesz sobie zobaczyć jak łatwo jest zrobić rysowanie planszy i wyliczać współrzędne.

link do skompilowanego exe - nie wiem czy w lazarusie są wszystkie użyte komponenty
http://speedy.sh/KMynW/Project1.exe

flowCRANE
Masz błąd w tym edytorze - grafika zaznaczonej pozycji w drzewie po prawej jest zawsze taka sama (testowałem exeka z linku ze speedyshare);
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Faktycznie, proste acz geniealne. Może i chrzaniłem, ale wydawało się mi, że przy użyciu TStringGrid będzie prościej. A Twój projekt @szopenfx przyda się w przyszłości. Dodalem go sobie po drobnych poprawkach do moich projektów z prefiksem NOT_MINE. Zbieram tak niektóre źródła tutaj, które mnie zaciekawią. A nie jest tego wiele, bo jak pewnie kojarzycie tylko ja miałem głównie wcześniej zwyczaj zapodawania na forum gotowców.

Tylko zastanawiam się czy mozolnie wczytałeś bitmapy do ImageList czy podzieliło je i tak ładnie dopasowało, bo u mnie po wczytaniu bitmapki robią się tak małe jak dla celów obrazków w TListView, a nie tak jak to u Ciebie samo [?] Delphi zrobiło?


Pozdrawiam.
edytowany 1x, ostatnio: olesio
szopenfx
We właściwościach ImageList ustawiłem wysokość i szerokość na 32 i wczytałem obrazek chtable.bmp (wyciągnięty z zasobów oryginalnej gry) wizard sam zapytał czy podzielić obrazek :P
_13th_Dragon
Jak to się zrobi w runtime z zasobów to nawet nie pyta.
olesio
Dzięki, faktycznie ImageList ma własności do ustalenia rozmiarów obrazka, a nie dostrzegłem tego wcześniej, tak to jest jak sie po nocy ogląda jakiś nie swój kod :)
SJ
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Bielsko-Biała
  • Postów:11
0

@szopenfx, dzięki, twoim sposobem jest najprościej.
To tak, tworzę komponent TImage jemu w canvas moge wstawić obrazek TBitmap w pozycji x,y. (metoda draw).
Nie pozostaje mi nic innego jak stworzyć obrazek planszy i obrazki pól planszy. Takie pytanie, czy da się cofnąć metodę draw? W Canvas nie ma metody Undo ;)

flowCRANE
Nie ma metody Undo, więc nie zrobisz tego tak łatwo;
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

Znowu sobie mnożysz problemy gdzie ich nie ma @shJeff. Nie wiem w czym problem żeby stworzyć tablicę ze zmiennymi klasy, o której wspominałem. Można w niej zdefiniowac zmienne jak Indeks obrazka po jego ustawieniu i po kliknięciu na undo. Tak ja bym kombinował. Zresztą układanie statków na planszy to jedyny według mnie etap gdzie można pozwolić na Undo, w przypadku właściwej gry to też można założyć. Ale wtedy się gracz może na swóje ostateczne strzały decydować w nieskończoność i je cofać. A i @furious programming zauażył błąd w kodzie @szopenfx'a. Oczywisćie nie problem to naprawić ustawiając SelectedIndex na taki sam, jak zwykły.


Pozdrawiam.
edytowany 1x, ostatnio: olesio
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Tuchów
  • Postów:12163
0

Bo tak to jest, jak się chce odizolować broń Boże od nauki czegokolwiek nowego...

Stwórz sobie PaintBox, zadeklaruj tablicę 10x10 (albo dwie - jeszcze z polem przeciwnika) o dowolnym wygodnym typie i na jej (ich) podstawie rysuj odpowiednie pola w komponencie; Gdzieś trzymaj informacje o ostatnim ruchu i jeśli gracz cofnie ruch to nie nie kombinuj z implementacją metody Undo w klasie kanwy, tylko przemaluj jeden kwadracik o współrzędnych z ostatniego ruchu (trzeymałbyś je w ww. zmiennej); Stwórz sobie też tablicę z grafikami dla odpowiednich stanów jedego kwadracika;

Możesz nawet szarpnąć się na klasę do obsługi pól gry i w niej przechowywać wszelkie informacje na temat położenia statków, ilości oddanych strzałów, ilości zniszczonych statków itd.; Uprościłoby to wiele problemów;

Poza tym proponowałbym przestać pytać - usiądź i zastanów się najpierw jak to ma działać.


olesio napisał(a)

A i @Furious Programming zauażył błąd w kodzie @szopenfx'a. Oczywisćie nie problem to naprawić ustawiając SelectedIndex na taki sam, jak zwykły.

Dodatkowo domalowałbym jakąś ramkę na grafice, żeby się wyróżniała :]


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.
SJ
Już się zastanowiłem i już zacząłem pisać. Stworzyłem te tablice 10x10, na początku ustalę tak, że tablice są int, a wartości: 0 - nic, 1 - statek, 2 - trafiony statek, 3 - zniszczony statek, 4 - pudło, planowałbym to na takiej zasadzie zrobić...teraz tak myślę przydała by się tablica też int mówiąca o współrzędnych statków. Tak jak napisałeś planuję na podstawie tablicy rysować pola. Pobrać współrzędne -> odczytać które pole (przydała by się tu 2 tablica) zostało trafione [0..9,0..9] i w razie czego na podstawie współrzędnych narysować coś. Ale teraz muszę uczyć się fiz
babubabu
poczytaj o enumach
SJ
@babubabu, wiem co to są typy wyliczeniowe i wiem co to są klasy. Ale niestety z pewnych względów nie mogę ich użyć. Gdybym miał to napisać po swojemu to bym to napisał na klasach rekordach enumach i czym tam jeszcze. Ale nie mogę.
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)