Roleplayer Game
rpg.html
<!DOCTYPE html>
<html>
<head>
<title>RPG game</title>
<link rel="stylesheet" type="text/css" href="rpg.css">
</head>
<body onload="reset()">
<h1>RPG game</h1>
<table>
<thead>
<tr>
<td>Skill</td>
<td>player 1</td>
<td>CPU</td>
</tr>
</thead>
<tbody>
<tr>
<td>Attack:</td>
<td><span id="p1_attack"></span></td>
<td><span id="cpu_attack"></span></td>
</tr>
<tr>
<td>Defence:</td>
<td><span id="p1_defence"></span></td>
<td><span id="cpu_defence"></span></td>
</tr>
<tr>
<td>Health:</td>
<td><span id="p1_health"></span></td>
<td><span id="cpu_health"></span></td>
</tr>
<tr>
<td colspan="3"><span id="feedback"></span></td>
</tr>
</tbody>
</table>
<br><hr><br>
<table>
<tr>
<td colspan="2">Score:</td>
</tr>
<tr>
<td>Wins: <span id="wins"></span></td>
<td><input type="button" id="escape" value="Escape" onclick="escape()" style="display: none;"></td>
</tr>
</table>
<br><hr><br>
<table>
<tr>
<td colspan="2">Actions:</td>
</tr>
<tr>
<td><input type="button" value="Combat" onclick="combat()"></td>
<td><input type="button" value="Restart Game" onclick="location.reload()"></td>
</tr>
<tr id="boostoptions" style="display: none;">
<td><input type="button" value="Apply Boost" onclick="boost()"></td>
<td>
<select id="stat_to_boost">
<option value="attack">attack</option>
<option value="defence">defence</option>
<option value="health">health</option>
</select>
</td>
</tr>
</table>
<script src="rpg.js"></script>
</body>
</html>
rpg.css
table {
border-collapse: collapse;
}
td {
border: 3px solid #778899;
text-align: left;
padding: 5px;
}
rpg.js
var p1_attack, p1_defence, p1_health, cpu_attack, cpu_defence, cpu_health;
var wins = 0;
var allowCombat = true;
const p1_min_damage_amount = 2;
const cpu_min_damage_amount = 1;
function update(msg = " "){
document.getElementById("p1_attack").innerHTML = p1_attack;
document.getElementById("p1_defence").innerHTML = p1_defence;
document.getElementById("p1_health").innerHTML = p1_health;
document.getElementById("cpu_attack").innerHTML = cpu_attack;
document.getElementById("cpu_defence").innerHTML = cpu_defence;
document.getElementById("cpu_health").innerHTML = cpu_health;
document.getElementById("wins").innerHTML = wins;
document.getElementById("feedback").innerHTML = msg;
}
function attack(){
var p1_attack_difference = p1_attack - cpu_defence;
var p1_attack_potential = p1_min_damage_amount;
if (p1_attack_difference > p1_min_damage_amount){ p1_attack_potential = p1_attack_difference; }
var p1_damage_inflicted = Math.floor((Math.random() * p1_attack_potential) + p1_min_damage_amount);
cpu_health = cpu_health - p1_damage_inflicted;
if(cpu_health < 1) { return true; } else { return false; } //victorius?
}
function defend(){
var cpu_attack_difference = cpu_attack - p1_defence;
var cpu_attack_potential = cpu_min_damage_amount;
if (cpu_attack_difference > cpu_min_damage_amount){ cpu_attack_potential = cpu_attack_difference; }
var cpu_damage_inflicted = Math.floor((Math.random() * cpu_attack_potential) + cpu_min_damage_amount);
p1_health = p1_health - cpu_damage_inflicted;
if(p1_health < 1) { return true; } else { return false; } //game over?
}
function winSequence(){
allowCombat = false;
wins = wins + 1;
update("win. claim boost");
document.getElementById("boostoptions").style.display = "table-row";
document.getElementById("escape").style.display = "inline";
}
function boost(){
stat_to_boost = document.getElementById("stat_to_boost").value;
var temp_amt = Math.floor((Math.random() * 10) + 5);
switch(stat_to_boost){
case "attack": p1_attack = p1_attack + temp_amt; break;
case "defence": p1_defence = p1_defence + temp_amt; break;
case "health": p1_health = p1_health + temp_amt; break;
}
document.getElementById("boostoptions").style.display = "none";
allowCombat = true;
generateNewOpponent();
}
function loseSequence(){
allowCombat = false;
update("GAME OVER.");
}
function combat(){
if (allowCombat){
var victorius = false;
victorius = attack();
update();
if (victorius){ winSequence(); }
else {
gameover = defend();
update();
if(gameover){ loseSequence(); }
}
}
}
function reset(){
p1_attack = Math.floor((Math.random() * 15) + 5);
p1_defence = Math.floor((Math.random() * 15) + 5);
p1_health = Math.floor((Math.random() * 15) + 5);
generateNewOpponent();
}
function escape(){
if(allowCombat && wins > 0){
wins = wins - 1;
generateNewOpponent();
}
if (wins < 1) { document.getElementById("escape").style.display = "none"; }
}
function generateNewOpponent(){
cpu_attack = Math.floor((Math.random() * (p1_attack * 1.3) ) + (p1_attack * 0.5) );
cpu_defence = Math.floor((Math.random() * (p1_defence * 1.3) ) + (p1_defence * 0.5) );
cpu_health = Math.floor((Math.random() * (p1_health * 1.3) ) + (p1_health * 0.5) );
if (cpu_attack < 1) cpu_attack = 1; if (cpu_defence < 1) cpu_defence = 1; if (cpu_health < 1) cpu_health = 1;
update();
}
Improve headings, add rules (HTML) and refine aesthetics (CSS)
You could also improve / modify game mechanics (JS), such as:
- play test, and better balance the game mechanics by adjusting the random max and min values
- add other abilities (e.g. magic)
- allow pickups or items than can be used as one offs to assist
- locations / bosses?
- story?
- store where i can trade items? etc.