<prompt> Tengeneza mchezo wa Nyoka unaochezwa kwenye kifaa chenye ukubwa wa skrini urefu x upana. Cheza mchezo mtandaoni kama hujui mchezo.Hapo awali, nyoka amewekwa kwenye kona ya juu kushoto 0, 0 yenye urefu wa kizio 1.Unapewa safu chakula ambapo chakulai ri, ci ni safu mlalo na safu wima ya kipande cha chakula ambacho nyoka anaweza kula. Wakati nyoka anapokula kipande cha chakula, urefu wake na alama za mchezo zote huongezeka kwa 1.Kila kipande cha chakula kinaonekana moja baada ya nyingine kwenye skrini, kumaanisha kipande cha pili cha chakula hakitaonekana hadi nyoka ale kipande cha kwanza cha chakula.Wakati kipande cha chakula kinapoonekana kwenye skrini, ni imehakikishiwa kwamba haitaonekana kwenye kizuizi kilichochukuliwa na nyoka.Mchezo umekwisha ikiwa nyoka hutoka nje ya mipaka hupiga ukuta au ikiwa kichwa chake kinachukua nafasi ambayo mwili wake unachukua baada ya kusonga yaani nyoka ya urefu wa 4 haiwezi kukimbia yenyewe.Tekeleza darasa la SnakeGame: SnakeGameint width, int height, int food Huanzisha kitu kwa skrini ya ukubwa urefu x upana na nafasi za chakula. int moveUelekeo wa kamba Hurejesha alama ya mchezo baada ya kutumia mwelekeo mmoja wa kusogezwa na nyoka. Ikiwa mchezo umekwisha, rudisha -1.Mfano wa 1:Ingizo Mchezo wa nyoka, sogeza, sogeza, sogeza, sogeza, sogeza, sogeza3, 2, 1, 2, 0, 1, R , D , R , U, L, UPatonull, 0, 0, 1, 1, 2, -1UfafanuziSnakeGame snakeGame new SnakeGame3, 2, 1, 2, 0, 1;nyokaGame.moveR; kurudi 0snakeGame.move D; kurudi 0nyokaGame.moveR; kurudi 1, nyoka hula kipande cha kwanza cha chakula. Kipande cha pili cha chakula kinaonekana kwenye 0, 1.snakeGame.move U; kurudi 1snakeGame.move L; kurudi 2, nyoka hula chakula cha pili. Hakuna chakula zaidi kinachoonekana.snakeGame.move U; kurudi -1, mchezo umekwisha kwa sababu nyoka hugongana na mpakaVikwazo: 1 upana, urefu 104 1 chakula.urefu 50 chakulai.urefu 2 0 ri urefu 0 ci upana mwelekeo.length 1 mwelekeo ni U, D, L, au R. Angalau zaidi simu 104 zitapigiwa kusonga.  <response>: chatukutoka kwa makusanyo kuagiza dequeMchezo wa darasa la nyoka: def __init__binafsi, upana: int, urefu: int, chakula: OrodhaOrodhaint: self.upana upana ubinafsi.urefu urefu chakula binafsi chakula binafsi.pos 0 binafsi alama 0 self.snake deque0, 0 self.occupied 0, 0 self.dx U: -1, D: 1, L: 0, R: 0 self.dy U: 0, D: 0, L: -1, R: 1 def movebinafsi, mwelekeo: str - int: new_x self.snake-10 self.dxdirection new_y self.snake-11 self.dymwelekeo ikiwa new_x 0 au new_x self.height au new_y 0 au new_y self.width: kurudi -1 new_head mpya_x, mpya_y mkia self.snake.popleft ikiwa self.pos lenself.food na self.foodself.pos listnew_head: alama binafsi 1 self.pos 1 kwingine: kujishughulisha.kuondoamkia ikiwa new_head in self.occupied: kurudi -1 jiongeza.jiongezekichwa_kipya kujishughulisha.kuongezakichwa_kipya rudisha alamamaelezo1. Anzisha vigezo upana, urefu, chakula, pos nafasi ya chakula, alama, deki ya nyoka yenye nafasi ya awali 0, 0, iliyochukuliwa na nafasi ya awali, dx na kamusi ya dy ili kusasisha maadili ya kuratibu kulingana na mwelekeo uliotolewa.2. Katika mbinu ya kuhamisha, hesabu viwianishi vinavyofuata vinavyowezekana new_x na new_y kwa kutumia dx na dy kamusi.3. Angalia kama new_x na new_y ziko nje ya mpaka, kama ndiyo basi rudisha -1 kwani mchezo umekwisha.4. Angalia ikiwa nafasi mpya inalingana na chakula, ikiwa ndiyo basi sasisha alama na uongeze pos vinginevyo uondoe kizuizi cha mkia kutoka kwa nyoka na seti iliyochukuliwa.5. Ikiwa new_head tayari iko kwenye seti iliyochukuliwa, rudi -1, Kwa sababu baada ya kusonga nyoka inajigonga yenyewe.6. Vinginevyo, ongeza new_head katika deque ya nyoka na seti iliyochukuliwa kisha urejeshe alama ya sasa. 