Om man har ett spelplan som är formad som ett L och den är uppdelad att den har 4 liggande rutor och 4 stående. Du måste nog ha någon typ av koordinatsystem och funktioner som kontrollerar var nästa ruta är. Är det för att visuellt visa flyttning eller annars bara? Om du inte visuellt ska visa en flyttning behöver du bara ha en lista med rutorna och sedan plocka ut var den rutan du ska flytta till finns. Att animera en flyttning är alltid värre än att bara flytta någonting eftersom att de hela steg du har i rutnätet bara stämmer just när saker står still, när någonting ska animeras så ligger sakerna inte längre i hela rutor. Så.. Du borde nog titta lite på det där med flyttal ;) Sedan är det bara att du matar på x/y-kordinaterna och ritar ut som vanligt tja animeringen är ju bara typ att den glider fram till där den ska stanna. Det du kan ha är en klass för varje ruta och sedan en lista med alla rutor i den ordningen som de kommer. Rutklassen har x, y samt storleken på rutan och annan extra information som kan vara intressant. Som redan föreslagit måste du ha någon form av koordinatsystem; du måste veta var du befinner dig, och var spelplanen är definierad.Beräkna att ändra riktning
Jag ställer ett objekt längst till höger och ska gå 6 steg, det vill säga tre till vänster och tre upp.
Hur gör man så den förstår det.
Finns ju olika sätt i olika programmiljö som VB, VB.NET, Delphi m.fl men själva formlern måste vara liknande.
Den måste på något sätt förstå att nu kan man inte längre går vänster utan måste gå uppåt
Ska varje ruta ha ett värde så man kan läsa av eller vad?Sv: Beräkna att ändra riktning
Hur du gör bäst beror ju på hur du har tänkt ha det.Sv: Beräkna att ändra riktning
Sv:Beräkna att ändra riktning
Är inga problem där men att få den att förstå att nu är det slut och man måste gpå up/ner/vänster/höger är inte så lätt Sv: Beräkna att ändra riktning
När du sedan ska flytta pjäsen tar du bara nästa ruta i listan och animerar till dess mitt, eller var du vill, utifrån rutan före, där pjäsen står, ända tills rätt ruta är nådd.Sv: Beräkna att ändra riktning
När du väl har det kan det inte vara speciellt svårt. Definiera bara en funktion kanJagFlyttaTill(int x, int y). Sedan är det bara att fråga den funktionen om du kan flytta till nästa position. I ditt exempel, anta att du börjar på 0,0.
Första steget: kanJagFlyttaTill(1,0) --> True
Andra steget: kanJagFlyttaTill(2,0) --> True
Tredje steget: kanJagFlyttaTill(3,0) --> True
Fjärde steget: kanJagFlyttaTill(4,0) --> False
Du har nu gått så långt till vänster som du kan eftersom funktionen returnerade false som indikerade att du inte kan flytta till den position du ville. Du måste nu ha någon form av logik som säger att du ska prova gå upp eller ned. Vi antar att du först provar gå upp.
Fjärde steget: kanJagFlyttaTill(3,1) --> True
Femte steget: kanJagFlyttaTill(3,2) --> True
Sjätte steget: kanJagFlyttaTill(3,3) --> True
Du har nu kommit dit du vill.
Funktionen kanJagFlyttaTill(...) måste naturligtvis känna till de begränsningar som finns i spelplanen (och också andra begränsningar som gör att du inte kan flytta till önskad position). I ditt fall med en väldigt liten spelplan räcker det förmodligen att bara spara giltigt koordinater i en array. För en större spelplan får du nog ha det i form av x-min och x-max samt y-min och y-max (möjligtvis flera olika om du har spelplaner som inte är i form av en box).
Jag gjorde på ett liknande sätt när jag gjorde tetris, och problemet är ju densamma.
Förstår dock inte vad problemet skulle bli med att visuellt visa flyttningen. Antingen kan du flytta dit du vill, eller så kan du inte. När du bestämt hur flyttningen blir, vilka "rutor" som används osv så är det ju bara att rita. Kan knappast vara något problem. Ska du flytta "halva" rutor, så kan du göra rutorna mindre så det alltid blir hela rutor (eller räkna med flyttal men det krånglar nog bara till det). Men jag kanske inte förstår problemet; kan bara säga att jag inte hade något problem att visuellt visa flyttningen av tetris-bitarna när jag gjorde tetris; och igen så verkar problemet vara densamma.