wie kann ich diese batch datei besser bzw anderes schreiben?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Bevor du ein Spiel programmierst solltest du dich erst mal darüber informieren, wie ein Spiel aufgebaut ist.

Selbst für zB. einen kleinen Plattformer bräuchtest du immens viele einzelne Bilder (in deinem Fall Textblöcke), würdest du für jede irgendwie mögliche Position ein eigenes machen. Bei aufwendigeren online Spielen wäre das so ziemlich unmöglich.

Wie sind diese also aufgebaut?

Du hast eine Grafik, zB. von einer Person oder deinem Ball und eine vom Hintergrund. Dann lässt du das Programm die Grafik zB. in die Mitte des Bildschirms zeichnen. Drückt der Spieler [D] um sich nach rechts zu bewegen zeichnest du die Person einfach etwas weiter rechts hin.

Versuche dein Spiel mal nach diesem Grundsatz umzuschreiben. Sehr hilfreich wird dir dabei BatBox.exe sein (siehe die Frage zum Text einfärben), denn damit kannst du Text und Symbole an bestimmte Stellen des Bildschirms zeichnen.

Hier mal ein Beispiel-Spiel mit Batbox (so ne Art FlappyBird):

@echo off & setlocal EnableDelayedExpansion
title bird
if "%~1" neq "" goto %~1

:init
set /a width=50
set /a height=30

set /a y=10
set /a x=2

echo %y% > y.txt
echo %x% > x.txt

mode con cols=%width% lines=%height%

start /b %~nx0 "update" "%width%" "%height%"
start /b %~nx0 "show"   "%width%" "%height%"

:loop
    pause >nul

    if not exist x.txt goto init

    set /p x=<x.txt
    set /p y=<y.txt

    if %y% GTR 1 (
        set /a y-=2
        echo !y! > y.txt
    )
    batbox /w 100
goto loop

:update
set /a x_v=2
set /a turn=%~2-x_v

:_update
    if not exist x.txt exit

    set /p y=<y.txt
    set /a y+=1
    echo %y% > y.txt

    set /p x=<x.txt
    if %x% GEQ %turn% set /a x_v*=-1
    if %x% LEQ 1      set /a x_v*=-1
    set /a x+=x_v
    echo %x% > x.txt

    batbox /w 500
goto _update

:show
    (
        set /p y=<y.txt
        set /p x=<x.txt

        if %y% GEQ %~3 goto gameOver
        if %y% LEQ 0   goto gameOver

        if "y:%y%; x:%x%" neq "y:!y!; x:!x!" (
            batbox /g %x% %y% /d " "
            batbox /g !x! !y! /d "X"
        )
        batbox /w 150
    )
goto show

:gameOver
    batbox /G 8 2 /D "GAME OVER."
    batbox /G 2 4 /D "any button for new Game"
    del x.txt
    del y.txt
exit

Man kann aber durchaus auch performantere Spiele damit bauen (ohne eigene show, update und listener Methoden und globale Variablen in Form von Dateien)

Hier ein paar Beispiele vom (ich glaube) Entwickler BatBoxs:

https://youtu.be/W5WYzvrqKe8

https://www.youtube.com/watch?v=sJy1sgvKDhU

~Tim

:D... daher weht der Wind...

Für ein animiertes Spiel bist Du eindeutig noch nicht weit genug.
Ich würde da wohl mit for-loops, Variablen, Arrays (... sorry PseudoArray ehe es wieder Beschwerten gibt) und String-replace arbeiten.
Du merkst ja selbst wie Monströs Deine Batch jetzt schon aussieht.

ich habe mal eine kleine Animation geschrieben die lediglich das Ei auf einer Linie verschiebt. Dafür benutze ich nicht 50 fest programmierte Frames , sondern lasse in einer Schleife die Position berechnen .

Die Erklärungen zu den verwendeten Befehlen findest Du in:

@echo off
setlocal enabledelayedexpansion
set "Ei-Line=0_________________________________________________"
for /l %%a in (0,1,50)  do (
  cls
  set /a "newPlace=%%a + 1"
  set /a "rest=%%a + 2"
      rem die Variablen newPlace und Rest ebenfalls in parametervariablen für Substring umwandeln
  for /f "tokens=1,2" %%b in ("!newPlace! !rest!") do (
    echo b=%%b , c=%%c
    echo %%a ...!Ei-Line!
      rem ersetze 0 durch _
    set "Ei-Line=!Ei-Line:0=_!"
      rem Substrings:
      rem schreibe in die neue Variable Ei-Line: die ersten %%b Zeichen vom alten Ei-Line, eine 0,  ...
      rem ..und ab dem Zeichen Nummer %%c vom alten Ei-Line bis  zum Ende
    set "Ei-Line=!Ei-Line:~0,%%b!0!Ei-Line:~%%c!" 
  )
)
pause
exit /b 

Mit einem Array stat einer einzelnen Linie ließe sich sich das Ei auch in der Höhe bewegen.
Das ganze ist jedoch eher eine Gedankenspielerei für Fortgeschrittene.
...und natürlich ist das Ganze extrem langsam . (Ich musste nicht einmal eine Bremse einbauen).

Dabei habe ich in der Sache noch nicht einmal eine Tastatur-Abfrage....

Um diese Effizient zu bewerkstelligen muss man mit einem zweiten Thread arbeiten... Und das bringt schon Leute ins Straucheln , die Batch einigermaßen im Griff haben.

https://www.gutefrage.net/frage/wie-kann-man-in-batch-nach-userinput-fragen-ohne-dabei-zu-pausieren?foundIn=list-answers-by-user#answer-277994242

Wirklich Sinn macht es nicht ein Animiertes Spiel in Batch zu schreiben.
Ich mache das nur mit weil , weil Batch meine Spielwiese ist... andere Leute lösen Keuzworträtsel ich Batche ;)

Hausaufgabe für Dich: Lass das ei erstmal wieder Zurücklaufen.

Wenn Du das kannst, lassen wir es Hüpfen ...

haha danke und jo ich versuche es laufen zu lassen

1

achso wie kann ich dich kontaktieren ich möchte dir gerne eine bat senden was ich heute gemacht habe und möchte von ist wissen wie ich es besser machen kann und wo :)

0

??

0

Hallo LordFuFu,

Am besten erklärst du mal was diese batch Datei genau machen soll.. Vorher kann dir hier keiner helfen wie du das verbessern kannst.

Ben

diese batch datei sollte nur ein test für ein spiel sein (die 0 ist das mänchen) gerade kann sie nur nach link und nach rechts und ich brauche halt hilfe wie man das noch anders schreiben könnte das die 0 sich bewegt oder das man auch anders eine verzögerung machen kann

0

Batch: Passworteingabe mit Timer?

Hallo. Ist es möglich eine Batch Passworteingabe mit einem Timer zu versehen?

Beispiel:

set /p a=Bitte Passwort eingeben: 

if %a%==5555 goto richtig 

if not %a%==5555 goto falsch 

{{"Timerablauf" goto falsch}}

:richtig 

echo Passwort akzeptiert. 

pause 

exit

:falsch 

echo Passwot falsch! 

timeout /t 2 >NUL 

shutdown /s /f /t 10 /c  exit

Die Stelle in {{ }} bitte als Code formulieren. Danke! :)

...zur Frage

Batch datei per Batch datei ansteuern

Ich möchte eine Batchdatei mit einer Batchdatei ansteuern. Ich habe Windows 8 und beide Dateien sind auf dem Desktop. Es soll wie ein Wahlprogramm sein:

@echo off

:abfrage

cls

echo Welches Protokoll soll ich starten ???

echo.

echo.

echo "Protokoll 1 - Virtuellen Desktop anzeigen - 1" [A]

echo.

echo "Protokoll 2 - Eine Internetseite anzeigen - 2" [B]

choice /N /C:AB

if errorlevel 255 goto abfrage

if errorlevel 2 goto 2

if errorlevel 1 goto 1

if errorlevel 0 goto abfrage

:1

start "%Protokoll 1 - Virtuellen Desktop anzeigen.bat%"

goto abfrage

:2

start "%Protokoll 2 - Eine Internetseite anzeigen%"

goto abfrage

...zur Frage

@echo off funktioniert nicht?

Ich habe ein Batch Datei und @echo off funktioniert nicht hier die Datei . Ich habe TicTacToe und das Quiz mal weg gelassen.

@echo off title Game

set /a try1=3 set /a try2=3 set /a try3=3 set /a try4=3 set /a try5=3

echo. echo. echo ------------ echo. echo Hallo hier koennen sie Spiele spielen. echo. echo ------------ timeout /t 3 >NUL goto auswahl :auswahl cls echo. echo. echo ------------ echo. echo 1.)TicTacToe echo. echo 2.)Quiz echo. echo ------------ set /p game= if %game% == 1 goto TicTacToe if %game% == 2 goto Quiz cls echo. echo. echo. echo. echo. echo. echo. echo Bitte gib eine Zahl ein die darueber steht. timeout -t 2 >NUL goto auswahl :TicTacToe title TicTacToe :main

set z1=1 set z2=2 set z3=3 set z4=4

............. Das gehört nicht dazu erst wieder das Quiz

:Quiz set /a try1=3 set /a try2=3 set /a try3=3 set /a try4=3 set /a try5=3 cls echo. echo ------------ echo. echo Quiz echo. echo ------------ timeout -t 3 >NUL set /p name=Dein Name: echo Ok %name%. Viel Glueck. timeout -t 2 >NUL goto frage1 :frage1 cls echo. echo Noch %try1% Versuch/e echo ------------ echo. echo Frage 1: Warum war der erste Mikrochip im Jahre 1969 eine Sensation? echo.

...zur Frage

bat Siri

Ich versuche eine Bat datei zu erstellen die ungefähr das selbe macht wie Siri bei einem iphone. Nur halt mit einer bat datei und auf text basis. bsp: et /p antwort= {1*} if "%antwort%"=="Wie wird das wetter morgen?" goto a if "%antwort%"=="Starte cmd" goto b

:a start iexplore www.wetter.com

:b start cmd.exe

usw.. {1*}=habe ich automatisch frei gelassen weil ich keine frage will, was auch funktioniert.

Ich habe jetz im mom dort stehen:

@echo off color 9 echo Hallo :Start set /p antwort= if "%antwort%"=="Hi" goto a if "%antwort%"=="Hallo" goto a if "%antwort%"=="Wie geht es dir?" goto b if "%antwort%"=="Wie geht es dir" goto b if not "%antwort%"=="Hi" goto 9999 if not "%antwort%"=="Hallo" goto 9999 if not "%antwort%"=="Wie geht es dir?" goto 9999 if not "%antwort%"=="Wie geht es dir" goto 9999

:a echo :) goto start

:b echo Ich bin nur ein Computerprogramm. echo Ich empfinde nichts. goto start

:9999 echo Ich kann dir leider nicht helfen :( goto start

nun überlege ich aber wie ich es mache das nicht immer die antwort von :9999 dortsteht.

...zur Frage

Batch - Ausgabe von 29 Random Zahlen (KEINE GLEICHEN)

Hi :)

Ich bin gerade dabei eine Batch zu machen die 29 unterschiedliche zufällige Zahlen in ein Textdokument ausgeben soll.

Also habe ich etwas wie das gemacht:

set /a Begrenzung=0
:start1
set /a Begrenzung=%Begrenzung%+1
IF %Begrenzung% == 30 GOTO finish

:start2
set /a Zahl=%random% %%29
FINDSTR /C:%Zahl% Zahlen.txt
IF ERRORLEVEL 0 GOTO start2 
IF ERRORLEVEL 1 echo %Zahl% >> Zahlen.txt & GOTO start1

:finish
echo Vorgang abgeschlossen! 
pause >nul

Aber es schreibt nur maximal 21 Zahlen in die Datei und ab da nicht weiter...

Gibt es eine Möglichkeit so etwas anders zu machen?

...zur Frage

Was möchtest Du wissen?