Roguelike / RPG рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ (рдХреЛрдб рдХреА 30 рд▓рд╛рдЗрдиреЗрдВ)

30 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рд░рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦрд┐рд▓реМрдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрджреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ "рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛" рдореЗрдВ рдЦреБрдж рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╢рд╛рдо рдХреЛ рдмреИрдардиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ "рдкреВрд░реНрдгрд░реВрдкреЗрдг" рд░реЛрдЬреБрдПрд▓рд┐рдХреЗ / рдЖрд░рдкреАрдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ (рдореБрдЭреЗ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдХреБрдЫ рд╣реБрдЖ рд╣реИ)ред рдЙрд╕реА рд╕рдордп, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦрд╛ (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдХрднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдХрд┐рд╕реА рддрд░рд╣ рдореИрдВ рд╕рднреА рд╕реА ++ рдореЗрдВ рдбрдмреНрдмрд▓ рдерд╛)ред

рдЫрд╡рд┐

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:


рдЦреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдЖрдк рдПрдХ рдмрд╣рд╛рджреБрд░ рд╢реВрд░рд╡реАрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд░рд╛рдЬрдХреБрдорд╛рд░реА рдХреЛ рдбреНрд░реИрдЧрди рд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╢реВрд░рд╡реАрд░ рдХреЗ рд╕рд╛рде рдбреНрд░реИрдЧрди рдХреА рдЧреБрдлрд╛ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рд░реЛрдорд╛рдВрдЪ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рд╕реЗ рд▓рдбрд╝рдирд╛ рдФрд░ рдЫреЛрдЯреА рдмрд╕реНрддрд┐рдпреЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд░рдирд╛ред рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рдХреЗ рдмрд╛рдж, рдирд╛рдпрдХ рдХреЛ рд╕реЛрдиреЗ рдФрд░ рдЬреАрд╡рди рдХрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рджреБрдХрд╛рдиреЛрдВ рдореЗрдВ рд╣реАрд▓рд┐рдВрдЧ рдФрд╖рдзрд┐ рдХреЗ рдЙрдкрдЪрд╛рд░ рдФрд░ рдЦрд░реАрдж рдкрд░ рд╕реЛрдирд╛ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреАрд╡рди рдХрд╛ рдЕрдиреБрднрд╡ рдирд╛рдпрдХ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕рдХрд╛ рд╣рдорд▓рд╛ рдФрд░ рдмрдЪрд╛рд╡ рдмрдврд╝рддрд╛ рд╣реИред рдЦреЗрд▓ рдХрд╛ рд▓рдХреНрд╖реНрдп рдбреНрд░реИрдЧрди рдХреЗ рд╕рд╛рде рд▓рдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╣рд░рд╛рдирд╛ рдФрд░ рд░рд╛рдЬрдХреБрдорд╛рд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рд╣реИред

рдмреЗрд▓рд╛ рд╕реЗ рд▓рд┐рдВрдХред

рдХреЛрдб

рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдкрдж рд╕реЗ рдХреЛрдб рд▓реЗ рд▓рд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдЬрд┐рд╕ рд░рд╛рдЬреНрдп рдХреА рдЬрд╝рд░реВрд░рдд рдереА, рдЙрд╕реЗ "рд╕рдорд╛рдкреНрдд" рдХрд░ рджрд┐рдпрд╛ред

рд╕реНрд░реЛрдд рдХреЛрдб ( рдлрд╝рд┐рдбреЗрд▓ рдХреЛ рджреЗрдЦреЗрдВ ):
рд╕реНрд░реЛрдд рдХреЛрдб
(function(elid, wi, he, exp, pot, gld, hp, lvl, cur_e, e_sz){ var hit = function(){ evs[cur_e][8]-=lvl*4+6; if(evs[cur_e][8]<=0) { alert("Monster defeated and you got "+evs[cur_e][10]+"EXP and $"+evs[cur_e][11]); exp+=evs[cur_e][10];gld+=evs[cur_e][11]; while(exp>=lvl*10){exp-=lvl*10;lvl++;alert("Level Up!")} cur_e++; if(cur_e==e_sz) alert("Victory!") } else { hp-=Math.max(0,evs[cur_e][9]-lvl*2-1); if(hp<=0) alert("Game Over!") } } var use = function(){ if (pot>0){pot--;hp+=10;if(hp>100)hp=100} } var nxt = function(){ cur_e++ }, battle = ["Attack","Use Potion +10HP","Skip Battle",hit,use,nxt], canvas=document.querySelector(elid), ctx=canvas.getContext("2d"), evs=[], e_tp=[ ["Shop", "Wizard provides his services", "Buy Potion $20", "Full Heal $100", "Leave", function(){ if(gld>=20){gld-=20;pot++} }, function(){ if(gld>=100){gld-=100;hp=100} }, nxt ], ["Skeleton", "A terrible skeleton on your way"].concat(battle,70,15,25,100), ["Goblin", "Green goblin wants to get your money"].concat(battle,50,10,15,70), ["Slime", "What the strange jelly monster?"].concat(battle,20,6,7,30), ["Dragon", "Omg! It is evil Dragon!","Attack","Use Potion +10HP","-",hit,use,,300,25,100,1000 ] ], q=e_tp.length-1; canvas.width=wi; canvas.height=he; for (var i=0;i<e_sz-1;i++) evs.push( e_tp[Math.floor(Math.random()*q)].slice(0) ); evs.push( e_tp[q].slice(0) ); var game = setInterval(function(){ ctx.clearRect(0,0,wi,he); ctx.fillText("NanoRPG in 30 lines of JavaScript by ripatti",10,15); ctx.fillText("LVL "+lvl+" HP "+hp+"/100 EXP "+exp+"/"+lvl*10+" ATK "+(lvl*4+6)+ " DEF "+(lvl*2+1)+" Gold $"+gld+" Potions "+pot,10,30); for (var i=0;i<e_sz;i++) ctx.fillText((i==e_sz-1||i<=cur_e)?evs[i][0]:"??",i*50+15,70); ctx.fillText("@",cur_e*50+25,60); ctx.fillText(evs[cur_e][1],20,100); if (evs[cur_e].length>8) ctx.fillText("Enemy HP "+evs[cur_e][8],250,100); for (var i=0;i<3;i++) { ctx.strokeRect(i*120+5,120,110,20); ctx.fillText(evs[cur_e][i+2],i*120+10,133); } }, 100); document.addEventListener('click', function(e){ for (var i=0;i<3;i++) if (i*120+5<=e.pageX && e.pageX<i*120+115 && 120<=e.pageY && e.pageY<140) if (hp>0) evs[cur_e][i+5]() }, false); })("#canvas",365,150,0,3,100,100,1,0,7); 


50 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╕рдВрд╕реНрдХрд░рдг ( рдлрд┐рдбрд▓ рдкрд░ рджреЗрдЦреЗрдВ ):
рд╕реНрд░реЛрдд рдХреЛрдб
 (function(elid, wi, he, exp, pot, gld, hp, lvl, cur_e, e_sz){ var hit = function(){ evs[cur_e][8]-=lvl*4+6; if (evs[cur_e][8]<=0) { alert("Monster defeated and you got "+evs[cur_e][10]+"EXP and $"+evs[cur_e][11]); exp+=evs[cur_e][10]; gld+=evs[cur_e][11]; while (exp>=lvl*10) { exp-=lvl*10; lvl++; alert("Level Up!") } cur_e++; if (cur_e==e_sz) alert("Victory!") } else { hp-=Math.max(0,evs[cur_e][9]-lvl*2-1); if(hp<=0) alert("Game Over!") } } var use = function(){ if (pot>0){pot--;hp+=10;if(hp>100)hp=100} } var nxt = function(){ cur_e++ } var battle = ["Attack", "Use Potion +10HP", "Skip Battle", hit, use, nxt]; var canvas=document.querySelector(elid), ctx=canvas.getContext("2d"); canvas.width=wi; canvas.height=he; var evs=[], e_tp=[ ["Shop", "Wizard provides his services", "Buy Potion $20", "Full Heal $100", "Leave", function(){ if(gld>=20){gld-=20;pot++} }, function(){ if(gld>=100){gld-=100;hp=100} }, nxt ], ["Skeleton", "A terrible skeleton on your way"].concat(battle,70,15,25,100), ["Goblin", "Green goblin wants to get your money"].concat(battle,50,10,15,70), ["Slime", "What the strange jelly monster?"].concat(battle,20,6,7,30), ["Dragon", "Omg! It is evil Dragon!","Attack","Use Potion +10HP","-",hit,use,,300,25,100,1000 ] ]; var q=e_tp.length-1; for (var i=0;i<e_sz-1;i++) evs.push( e_tp[Math.floor(Math.random()*q)].slice(0) ); evs.push( e_tp[q].slice(0) ); var game = setInterval(function(){ ctx.clearRect(0,0,wi,he); ctx.fillText("NanoRPG in 30 lines of JavaScript by ripatti",10,15); ctx.fillText("LVL "+lvl+" HP "+hp+"/100 EXP "+exp+"/"+lvl*10+" ATK "+(lvl*4+6)+ " DEF "+(lvl*2+1)+" Gold $"+gld+" Potions "+pot,10,30); for (var i=0;i<e_sz;i++) ctx.fillText((i==e_sz-1||i<=cur_e)?evs[i][0]:"??",i*50+15,70); ctx.fillText("@",cur_e*50+25,60); ctx.fillText(evs[cur_e][1],20,100); if (evs[cur_e].length>8) ctx.fillText("Enemy HP "+evs[cur_e][8],250,100); for (var i=0;i<3;i++) { ctx.strokeRect(i*120+5,120,110,20); ctx.fillText(evs[cur_e][i+2],i*120+10,133); } }, 100); document.addEventListener('click', function(e){ if (hp>0) for (var i=0;i<3;i++) if (i*120+5<=e.pageX && e.pageX<i*120+115 && 120<=e.pageY && e.pageY<140) evs[cur_e][i+5]() }, false); })("#canvas",365,150,0,3,100,100,1,0,7); 


рдореИрдВрдиреЗ html рдФрд░ css рдХреЛрдб рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ: html - рдХреЛрдб рдХреА 1 рдкрдВрдХреНрддрд┐, css - 4ред

рдирд┐рд╖реНрдХрд░реНрд╖

рд░реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдЬрдЧреЛрд░рд┐рди рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рд╕рд╛рдВрдк рдХреЗ рд▓рд┐рдП DjComandos рдФрд░ рдЕрд░реНрдХрд╛рдиреЙрдЗрдб рдХреЗ рд▓рд┐рдП рд▓рд┐рдиреЛрд▓рд┐рдпрдо ред рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред

4k рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ UPD Roguelike / RPG

рдХреЙрдорд░реЗрдб shvedovka рдиреЗ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрдХреНрд░реАрдп рдЦреЗрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред 30 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдЪрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдпрд╛: рдХреЛрдб 4 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ lolmaus рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ , рдФрд░ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ)ред рдЪрдХреНрд░реАрдп рдЦреЗрд▓реЛрдВ рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ - рдореИрдВрдиреЗ рдмрд╣реБрдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рддрд╣рдд рдЦреЗрд▓ рдХреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд░ рджрд┐рдпрд╛ред

рдЕрд░реНрдерд╛рддреН:

рджреБрдирд┐рдпрд╛ рдХреА рдкреАрдврд╝реА рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡:

рдФрд░ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рдВрддреБрд▓рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрдИ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ред рдФрд░ рд╣рд╛рдБ ... рдЕрдм рд░рд╛рдЬрдХреБрдорд╛рд░реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рдбрд▓ рдкрд░ рдЧреЗрдо рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред рдпрд╣ рдмрд╣реБрдд рдХрдЯреНрдЯрд░ рдирд┐рдХрд▓рд╛ред

рдареАрдХ рд╣реИ, рдХреЛрдб , рдмрд┐рд▓реНрдХреБрд▓ред рд╕реНрд╡рд░реВрдкрдг рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рдореИрдВрдиреЗ 4000 рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣рдЯрд╛ рджрд┐рдП рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдирд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдирд┐рдЪреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (рдПрдХ рдХреИрд╕реАрдиреЛ рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛)ред рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред

рдЗрд╕ рдкрд░, рдореИрдВ рдЦреЗрд▓ рдЦрддреНрдо рд╣реЛрдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In202684/


All Articles