Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Snake, Wężyk z prostą grafą.
lord_t
post
Post #1





Grupa: Zarejestrowani
Postów: 603
Pomógł: 131
Dołączył: 24.07.2007
Skąd: Górny Śląsk

Ostrzeżenie: (0%)
-----


W ramach ćwiczenia się w js i jQuery(wersja: 1.2.3) postanowiłem popełnić Snake'a, który w praktyce wygląda tak: SNAKE

Info:
-sterowanie na klawiszach W,S,A,D
-jestem świadom, że odznaczenie inputa sprawia, że gra nie działa.

Kody:

jQuery:
  1. <script type="text/javascript" src="jquery-1.2.3.min.js"></script>
  2. <script type="text/javascript">
  3. <!--
  4.  
  5. function Snake(nazwa_,rozmiarPlanszy_,szybkosc_,maxOwocow_)
  6. {
  7. /* Snake by Pawel 'lord_T' Maruszczyk
  8. * Silesia, July 2008, version 1.0
  9. * License MIT
  10. */
  11.  
  12. this.rozmiar=rozmiarPlanszy_;
  13. this.ileOwoc=0;
  14. this.maxOwoc=maxOwocow_|2;
  15. this.dlugosc=2; //glowa + ogon
  16. this.ogon=[];
  17. this.szybkosc=szybkosc_;
  18. this.nazwa=nazwa_;
  19. this.ruch=true;
  20. this.i;
  21. this.j;
  22. this.macierz;
  23. this.kierunek='down';//'up','right','left'
  24. this.niemozliwy='s';//kierunek niemozliwy do wybrania (ktory klawisz)
  25. var ths=this;
  26.  
  27. //aktualizacja ogona
  28. this.addTail=function(a,b)
  29. {
  30. this.ogon.unshift({i:a,j:b});
  31. if( (this.ogon.length+1) >this.dlugosc )
  32. {
  33. var usuniety=this.ogon.pop();
  34. $('#'+usuniety.i+'_'+usuniety.j).removeClass().addClass('pole');
  35. }
  36. }
  37.  
  38. //sprawdzanie kolizji glowy z ogonem i owocami
  39. this.checkCol/*isions*/=function(i,j)
  40. {
  41. var count=this.ogon.length;
  42. for(var k=1;k<count;++k)
  43. if(this.ogon[k].i==i && this.ogon[k].j==j){
  44. this.ruch=false;
  45. break;
  46. }
  47. if($('#'+i+'_'+j).hasClass('owoc')){
  48. ++this.dlugosc;
  49. --this.ileOwoc;
  50. $('#'+i+'_'+j).removeClass().addClass('glowa');
  51. }
  52. }
  53.  
  54. //kolorowanie glowy i sprawdzenie kolizji
  55. this.putHead=function(i,j)
  56. {
  57. $('#'+i+'_'+j).addClass('glowa');
  58. this.checkCol(i,j);
  59. this.i=i;
  60. this.j=j;
  61. }
  62.  
  63. //kolorowanie ogona
  64. this.moveTail=function()
  65. {
  66. for(var k=0;k<this.ogon.length;++k)
  67. $('#'+this.ogon[k].i+'_'+this.ogon[k].j).addClass('ogon');
  68. }
  69.  
  70. //ruch glowy w wybranym kierunku i aktualizacja ogona
  71. this.moveHead=function()
  72. {
  73. this.addTail(this.i,this.j);
  74. switch(ths.kierunek)
  75. {
  76. case 'down': ths.niemozliwy='w';++this.i;this.i%=this.rozmiar;break;
  77. case 'up' : ths.niemozliwy='s';this.i+=(this.rozmiar-1);this.i%=this.rozmiar;break;
  78. case 'left': ths.niemozliwy='d';this.j+=(this.rozmiar-1);this.j%=this.rozmiar;break;
  79. case 'right':ths.niemozliwy='a';++this.j;this.j%=this.rozmiar; break;
  80. }
  81. this.putHead(this.i,this.j);
  82. }
  83.  
  84. //wstawianie owocow na plansze
  85. this.putFruit=function()
  86. {
  87. if(this.ileOwoc<=this.maxOwoc){
  88. var losI=Math.floor(Math.random() * this.rozmiar);
  89. var losJ=Math.floor(Math.random() * this.rozmiar);
  90. var wolne=true;
  91.  
  92. if(this.i==losI && this.j==losJ) wolne=false;
  93. if(wolne){
  94. var count=this.ogon.length;
  95. for(var k=0;k<count;++k)
  96. if(this.ogon[k].i==losI && this.ogon[k].j==losJ){
  97. wolne=false;
  98. break;
  99. }
  100. }
  101. if(wolne){
  102. $('#'+losI+'_'+losJ).addClass('owoc');
  103. ++this.ileOwoc;
  104. }
  105. }
  106.  
  107. nastOwoc=Math.floor(Math.random())+8.5*ths.szybkosc;
  108. setTimeout(ths.nazwa+".putFruit()",nastOwoc);
  109. }
  110.  
  111. //petla czasu - rusza wezem
  112. this.timeLoop=function()
  113. {
  114. this.moveHead();
  115. this.moveTail();
  116. if(this.ruch)
  117. setTimeout(ths.nazwa+".timeLoop()",ths.szybkosc);
  118. else{
  119. $('.waz div').css('background','#ccc');
  120. $('.waz').after($('<div id="gameover">GAME OVER</div>'));
  121. }
  122. }
  123.  
  124. //przygotowanie planszy
  125. this.makeSnakesPlace=function()
  126. {
  127. n=this.rozmiar;
  128. this.macierz=new Array(n);
  129. var tabelaPola=$('<table class="waz"></table>');
  130. for(var i=0;i<this.rozmiar;++i)
  131. {
  132. this.macierz[i]=new Array(n);
  133. var wiersz=$('<tr></tr>');
  134. for(var j=0;j<this.rozmiar;++j)
  135. {
  136. this.macierz[i][j]=0;
  137. wiersz.append($('<td><div class="pole" id="'+i+'_'+j+'"></div></td>'));
  138. }
  139. tabelaPola.append(wiersz);
  140. }
  141. $('body').append(tabelaPola).append('<input style="width:0;color:white" type="text" id="czytnik"/>');
  142. $('#czytnik').focus();
  143.  
  144. $('#czytnik').keypress(function(e){
  145. $(this).val('');
  146. var key=String.fromCharCode(e.which);
  147. if(key!=ths.niemozliwy)
  148. switch(key){
  149. case 's':ths.kierunek='down'; break;
  150. case 'w':ths.kierunek='up'; break;
  151. case 'a':ths.kierunek='left'; break;
  152. case 'd':ths.kierunek='right'; break;
  153. }
  154. });
  155. this.putHead(0,2);
  156. this.putFruit();
  157. this.timeLoop();
  158. }//make
  159.  
  160. this.makeSnakesPlace();
  161. }//objekt snake
  162.  
  163. $('document').ready(function(){
  164. Waz=new Snake('Waz',10,300);
  165. });
  166. //-->


css:
Kod
<style type="text/css">
/* <![CDATA[ */
div{
height:20px;
width:20px;
}

div.pole{
background:#217F25;
}

div.glowa{
background:yellow;
}

div.ogon{
background:red;
}

div.owoc{
background:blue;
}

table.waz,#gameover
{
margin:20px auto;
padding:0;
}

#gameover{
width:100px;
}

td,tr{
    padding:0;
    margin:0;
    border:0;
}
/* ]]> */
</style>


Trochę mi ten kod przycięło do lewej, no ale tak działa forum na tabulacje;) Ładniejszy w źródle strony:)

Ten post edytował lord_t 18.07.2008, 21:19:39


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- lord_t   [jQuery] Snake   18.07.2008, 21:17:51
- - bim2   zamiast $('#czytnik').keypress daj ...   21.07.2008, 23:55:04
- - lord_t   $(document).key... pomogło, thx. Jak zrobię ...   22.07.2008, 11:31:37
- - Szunaj85   Gierka nawet całkiem całkiem, ale według mnie: - p...   7.08.2008, 18:47:23
- - .radex   Jest ok, ale nic specjalnego. Można powiedzieć, że...   7.08.2008, 21:07:57
- - Миха   Gra bardzo fajna, oceniam na 8/10. Zamiast kolorow...   11.08.2008, 16:25:39
- - tiraeth   Widzę kilka literówek w kodzie, np. ths.niemozliwy...   11.08.2008, 17:27:41
- - Crozin   @tiraeth: autor wcześniej zrobiłKodvar ths=this;Ni...   11.08.2008, 17:50:01
- - Babcia@Stefa   Kodu nie oceniam (nie mam czasu przegląda...   11.08.2008, 19:19:05
- - lord_t   Najpierw trochę odpowiem: @tiraeth: to nie literów...   11.08.2008, 23:21:24
|- - zegarek84   ogólnie dobrze napisana aplikacja - na głębsze prz...   4.02.2010, 20:55:38
- - vokiel   Sterowanie w Operze wreszcie działa, aż się skusił...   12.08.2008, 07:51:42
- - snovvy   Straciłem na tej grze około 10 min świetna sprawa...   13.08.2008, 11:47:18
- - lord_t   RE: [jQuery] Snake   4.02.2010, 19:27:44
- - lord_t   Dzięki za konstruktywny komentarz - Twoje rady uwz...   5.02.2010, 01:49:25
- - zegarek84   teraz jadę w pociągu i deczo się "znieczuliłe...   5.02.2010, 10:47:50
- - lord_t   eval: bingo! Uważam, że nie ma sensu już nic ...   5.02.2010, 12:18:01
- - ShadowD   318, nie było już za bardzo gdzie się zmieścić, po...   5.02.2010, 12:37:02
- - lord_t   RE: [jQuery] Snake   21.02.2010, 17:50:47
- - darko   Kozackie! Tylko brakuje mi liczenia punktów z...   21.02.2010, 17:58:39
- - koderrr   swietne ! przydalaby sie jedynie lista graczy...   21.02.2010, 18:13:56
- - thomson89   Świetna gierka, a i postępy znakomite. Jak patrzę ...   21.02.2010, 22:00:02
- - frytek92   Naprawdę super jeszcze lepiej by było jak bym widz...   21.02.2010, 22:20:30


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:23