Could anyone help me find what's wrong with this script?

Place for questions and answers for all newcomers and new coders. This is a free for all forum, no question is too stupid and to noob.

Could anyone help me find what's wrong with this script?

Postby KingScar » Wed Oct 22, 2014 2:13 am

Hey guys, been awhile since I posted on here, but I figured if anyone could help me figure this out, it'd be you lot. :lol:

I'm working on a little text based javascript game and I've been using chromes Javascript console for the output. The 'game' works off a series of methods written into an object called `Player` created from a constructor `Character` that are linked to HTML buttons and manipulated with jQuery 1.11.

The code has been validated by multiple sources to be 100% clean JS however, we all know that doesn't always matter. There are a number of bugs i've found that I can't find a solution to.

The two biggest bugs i've noticed:

- certain instances of enemies will spawn with zero health when as far as I can tell i've made there health to a minimum of 1
- After a number of battles the player automatically wins every time with 1 hit.

I've included a JSFiddle to hopefully give you an idea of the working code although, you won't see output due to the fact it is all returned in the console.

http://jsfiddle.net/ryanhagz/vxbp7fxL/5/

**Note:** In the the script, the buttons, explore and run aren't linked to anything. The way to trigger the fights is to rest and an enemy will randomly come and there attributes will be loaded into the div enemy. The 'Fight Log' is logged to the console.


Here are is my JS

Code: Select all
$(document).ready(function () {
    var m = Math;
        //function in Character constructor
        function do_dmg(enemy) {
            //calculates amount of damage done by by finding the lower number between a (rand int from 0 to personal health - a rand int from 0 to enemy health) and
            var dmg = m.min(m.max(
            m.round(m.random() * this.health) - m.round(m.random() * enemy.health), 0),
            enemy.health);
            $('#hp').text(this.health);
            $('#ehp').text(enemy.health -= dmg);
            if (dmg === 0) {
                console.log(this.name + " evades " + enemy.name + "'s attack!");
            } else {
                console.log(this.name + " hurts " + enemy.name + " for " + dmg);
                return enemy.health <= 0;
            }
        }
    }

    //Methods from Player Object.
    p.rest = function () {
        console.log(this.awoken);
        if (this.awoken === 0) {
            window.enemy = Enemies[m.floor(m.random() * Enemies.length)];
            window.enemy = enemy;
            console.log(this.name + ' is awoken by a ' + enemy.name + '!');
            $('#ename').text(enemy.name);
            $('#ehp').text(enemy.health);
            this.state = 'fight';
         $('#state').text(this.state);
            this.enemy_atk();

        } else if (this.awoken == 1) {
            console.log(this.name + ' rests.');
            if (this.health < this.max_health) {
                this.health += 1;
                $('#hp').text(p.health);
            } else if (this.energy < this.max_energy) {
                this.energy += 1;
                $('#ep').text(p.energy);
            } else {
                console.log(this.name + ' slept too long.');
                this.energy -= 1;
                $('#ep').text(p.energy);
            }
        } else {
            console.log(this.name + 'can\'t rest right now');
        }

    },

    p.enemy_atk = function () {
        if (enemy.health >= 1) {
            if (enemy.do_dmg(this) >= this.health) {
                this.health = 0;
                console.log(this.name + ' was killed by the ' + enemy.name);
            } else {
                $('#ehp').text(enemy.health);
                $('#hp').text(this.health);
            }
        } else {
            $('#ename').text('');
            $('#ehp').text('');
         console.log(this.name + ' killed the ' + enemy.name);
         console.log(this.name + ' gained ' + enemy.XP / this.level + ' EXP!');
         this.state = 'normal';
         $('#state').text(this.state);
        }


    },

    p.atk = function () {
        if (this.state != 'fight') {
            console.log(this.name + ' swings at nothing and falls.');
            this.tired();
        } else {
            if (this.do_dmg(enemy) >= enemy.health) {
                enemy.health = 0;
                console.log(this.name + ' killed ' + enemy.name);
                console.log(this.name + ' gained ' + enemy.XP / this.level + ' EXP!');
                $('#ename').text('');
                $('#ehp').text('');
                this.state = 'normal';
            $('#state').text(this.state);
            } else {
                this.do_dmg(enemy);
                this.enemy_atk();
            }
        }
    },


If you'd like, I could post the whole script to give more reference. I just didn't wanna spam a bunch of code though either. lol


Any and all help is really appreciated!

Thanks! :D
Advanced:Html(XHTML), CSS, Writing
Intermediate: php, MYSQL, Level Design, C++, JavaScript
Beginner:Java, C-Lite, 3D modeling

The difference between me and you:

You: :geek: Me: :ugeek:

Image
User avatar
KingScar
 
Posts: 54
Joined: Wed Sep 08, 2010 12:08 pm
Location: New Jersey
Has thanked: 0 time
Been thanked: 1 time

Re: Could anyone help me find what's wrong with this script?

Postby MikuzA » Wed Oct 22, 2014 4:50 am

Hello,

I tested your game through the JSFiddle, I see something really fishy about the 'REST' button, or that enables me to do the instakills frequently.
Or to be more precise, the enemy_atk() function seems to have some glitch.

I added a health-check here:
Code: Select all
    p.enemy_atk = function () {
        console.log(enemy.health);
        if (enemy.health >= 1) {


And this is what I got in console after I have gained defeated one enemy.
Ryan is awoken by a Goblin! (index):140
0 (index):167
Ryan killed the Goblin (index):179
Ryan gained 25 EXP! (index):180
0 (index):136
Ryan is awoken by a Demon! (index):140
0 (index):167
Ryan killed the Demon (index):179
Ryan gained 50 EXP! (index):180
0 (index):136
Ryan is awoken by a Demon! (index):140
0 (index):167
Ryan killed the Demon (index):179
Ryan gained 50 EXP! (index):180
0 (index):136
Ryan is awoken by a Dragon! (index):140
0 (index):167
Ryan killed the Dragon (index):179
Ryan gained 100 EXP!


So, the enemies spawn with zero hp.. :-)
Also I noticed that when I press REST frequently sometimes I see my health popping up to 8, instead of expected 3 or 4. Like matching the enemies HP, but didn't see any direct flaw in the code to grasp this.

Hope this helps :-)
Why so serious?

Business Intelligence, Data Engineering, Data Mining
PHP, HTML, JavaScript, Bash/KornShell, Python, C#, PL/SQL
MySQL, DB2, Oracle, Snowflake
Pentaho, DataStage, Matillion, Unity3D, Blender
User avatar
MikuzA
 
Posts: 395
Joined: Thu Aug 08, 2013 3:57 am
Location: Helsinki, Finland
Has thanked: 0 time
Been thanked: 21 times

Re: Could anyone help me find what's wrong with this script?

Postby Winawer » Thu Oct 23, 2014 1:32 am

The code seems to pick from a pool of three actual enemies, not types of enemies. When the player kills an enemy it will have 0 HP and will basically respawn as a corpse next time.
Winawer
 
Posts: 180
Joined: Wed Aug 17, 2011 12:53 am
Location: Finland
Has thanked: 0 time
Been thanked: 1 time

Re: Could anyone help me find what's wrong with this script?

Postby MikuzA » Thu Oct 23, 2014 3:42 am

Winawer wrote:The code seems to pick from a pool of three actual enemies, not types of enemies. When the player kills an enemy it will have 0 HP and will basically respawn as a corpse next time.

Respawn as a corpse.. ZOMBIE ALERT :cry:
Why so serious?

Business Intelligence, Data Engineering, Data Mining
PHP, HTML, JavaScript, Bash/KornShell, Python, C#, PL/SQL
MySQL, DB2, Oracle, Snowflake
Pentaho, DataStage, Matillion, Unity3D, Blender
User avatar
MikuzA
 
Posts: 395
Joined: Thu Aug 08, 2013 3:57 am
Location: Helsinki, Finland
Has thanked: 0 time
Been thanked: 21 times


Return to Beginner Help and Support

Who is online

Users browsing this forum: No registered users and 2 guests

x