Nimetengeneza game nakuliweka Play Store

Mkuu nitakucheki
Sent using Jamii Forums mobile app
 
Sio open source kwa sasa mkuu, hope unaelewa. But vizuri kuangalia source code before huja judge cuz unakuwa unajiaibisha. Usizani kwamba wanachofanya wazungu na sisi watanzania wa chini hatuwezi

Haya nimerudi, nilikwambia nitakushika unadhani nilikua natania, labda hujui unachoongelea mkuu ndicho kitu nimegundua kutoka kwako.
Kwanza kujibu swala lako sijasema wanachofanya wazungu sisi hatuwezi nope, tunaweza sana tu, nimeshiriki competition kibao na hao wazungu unaowasema hata silicon valley nyingine team yangu ikashinda nyingine tuka-lose, knowledge mtu yeyote yule anaweza kua nayo na akawa the best kwa anachokifanya hata kama kazaliwa kijijini.

Nachopinga mimi ni kimoja tu, kutudanganya basi. Umesema umetengeneza language yako na game engine yako mwenyewe si ndiyo? Sasa nimedecompile apk nzima nimeiona, hiyo language unayosema umetengeneza na game engine yako unamaanisha JavaScript? na kutumia javascript canvas kudraw? Toka lini JavaScript ikawa your language mzee?

Sasa usijesema ninakusingizia proof hii hapa, code yako yote hii hapa.

Tuanze na main.js file

Code:
draw.layout["main"] = function() {
    var layout = new Object();
    layout.start = function() {
        draw.input.index = draw.data[draw.input.index] ? draw.input.index : 0;
        draw.action.next = false;
        draw.action.stop = false;
        draw.action.timeout = false;
        draw.item.background = new Object();
        draw.item.background.render = function() {
            draw.fill(Color.GREY).rectangle(0, 0, draw.width, draw.height);
        };
        draw.item.stop = new Object();
        draw.item.stop.fade = 0.1;
        draw.item.stop.render = function() {
            draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.BRICK).rectangle(0, 0, draw.width, draw.height).restore();
        };
        draw.item.next = new Object();
        draw.item.next.fade = 0.1;
        draw.item.next.render = function() {
            draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.WATER).rectangle(0, 0, draw.width, draw.height).restore();
        };
        draw.item.player = new Object();
        draw.item.player.x = 20 * 8;
        draw.item.player.y = 20 * 6;
        draw.item.player.width = 20;
        draw.item.player.height = 20;
        draw.item.player.grounded = false;
        draw.item.player.velocity = { x: 0, y: 0 };
        draw.item.player.color = Color.DARK;
        draw.item.player.friction = 0.8;
        draw.item.player.gravity = 0.98;
        draw.item.player.move = function() {
            this.x += this.velocity.x;
            this.y += this.velocity.y;
            this.velocity.x *= this.friction;
            this.velocity.y += this.gravity;
        };
        draw.item.player.render = function() {
            draw.fill(this.color);
            draw.rectangle(this.x, this.y, this.width, this.height);
        };
        draw.item.fire = new Array();
        draw.item.enemy = new Array();
        draw.item.environment = draw.pixelset();
        draw.item.environment.x = 0;
        draw.item.environment.y = 0;
        draw.item.environment.size = { width: 20, height: 20 };
        draw.item.environment.data(draw.data[draw.input.index]);
        draw.item.environment.update();
        draw.item.environment.each.forEach(function(environment) {
            if (environment.id == 6) draw.item.enemy.push({
                x: environment.x,
                y: environment.y + environment.height - 30,
                width: 30,
                height: 30,
                energy: 100,
                speed: 3,
                color: Color.BRICK,
                move: function() {
                    this.x += this.speed;
                },
                render: function() {
                    draw.fill(this.color);
                    draw.rectangle(this.x, this.y, this.width, this.height);
                }
            });
            if (environment.id == 9) {
                draw.item.player.x = environment.x;
                draw.item.player.y = environment.y;
            }
        });
        draw.text.time = draw.print();
        draw.text.time.size = 4;
        draw.text.time.opacity = 0.6;
        draw.text.time.color = Color.WHITE;
        draw.text.time.value = "00";
        draw.text.index = draw.print();
        draw.text.index.size = 6;
        draw.text.index.color = Color.WHITE;
        draw.text.index.value = (draw.input.index < 9 ? "0" : "") + (draw.input.index + 1);
        draw.text.information = draw.print();
        draw.text.information.size = 6;
        draw.text.information.color = Color.WHITE;
        draw.input.button.menu = draw.pixelset();
        draw.input.button.menu.width = 10 * 5;
        draw.input.button.menu.height = 10 * 5;
        draw.input.button.menu.size = { width: 10, height: 10 };
        draw.input.button.menu.data("1 FFFFFF.1 1 1 1 1/0 0 0 0 0/1 1 1 1 1/0 0 0 0 0/1 1 1 1 1.");
        draw.input.button.menu.update();
        draw.input.button.left = new Object();
        draw.input.button.left.width = 40;
        draw.input.button.left.height = 40;
        draw.input.button.left.opacity = 0.6;
        draw.input.button.left.color = Color.WHITE;
        draw.input.button.left.render = function() {
            draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
        };
        draw.input.button.right = new Object();
        draw.input.button.right.width = 40;
        draw.input.button.right.height = 40;
        draw.input.button.right.opacity = 0.6;
        draw.input.button.right.color = Color.WHITE;
        draw.input.button.right.render = function() {
            draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
        };
        draw.input.button.fire = new Object();
        draw.input.button.fire.width = 40;
        draw.input.button.fire.height = 40;
        draw.input.button.fire.opacity = 0.6;
        draw.input.button.fire.color = Color.WHITE;
        draw.input.button.fire.render = function() {
            draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
        };
        draw.input.button.up = new Object();
        draw.input.button.up.width = 40;
        draw.input.button.up.height = 40;
        draw.input.button.up.opacity = 0.6;
        draw.input.button.up.color = Color.WHITE;
        draw.input.button.up.render = function() {
            draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
        };
        draw.frame = 0; draw.ad = draw.ad ? draw.ad : 0; draw.width = draw.item.environment.size.width * 80; draw.height = draw.item.environment.size.height * 20;
    };
    layout.input = function() {
        draw.input.action.menu = draw.input.pad(0, 17) || draw.input.key(27) || draw.click(draw.input.button.menu);
        draw.input.action.fire = draw.input.pad(0, 9) || draw.input.key(32) || draw.click(draw.input.button.fire);
        draw.input.action.left = draw.input.pad(0, 2) || draw.input.key(37) || draw.input.touch("left") || draw.click(draw.input.button.left);
        draw.input.action.right = draw.input.pad(0, 0) || draw.input.key(39) || draw.input.touch("right") || draw.click(draw.input.button.right);
        draw.input.action.up = draw.input.pad(0, 10) || draw.input.key(38) || draw.input.touch("up") || draw.click(draw.input.button.up);
        if (draw.input.action.fire) if (draw.wait(10)) draw.item.fire.push({
            x: draw.item.player.x + draw.item.player.width,
            y: draw.item.player.y,
            width: 10,
            height: 10,
            color: Color.WHITE,
            move: function() {
                this.x += 10;
            },
            render: function() {
                draw.fill(this.color);
                draw.rectangle(this.x, this.y, this.width, this.height);
            }
        });
        if (draw.input.action.up) draw.input.button.up.opacity = 1; else draw.input.button.up.opacity = 0.6;
        if (draw.input.action.right) draw.input.button.right.opacity = 1; else draw.input.button.right.opacity = 0.6;
        if (draw.input.action.left) draw.input.button.left.opacity = 1; else draw.input.button.left.opacity = 0.6;
        if (draw.input.action.fire) draw.input.button.fire.opacity = 1; else draw.input.button.fire.opacity = 0.6;
        if (draw.input.action.up) if (draw.item.player.jumping == false) { draw.item.player.velocity.y = -12; draw.item.player.jumping = true; }
        if (draw.input.action.right) if (draw.item.player.velocity.x < 4) draw.item.player.velocity.x += 1;
        if (draw.input.action.left) if (draw.item.player.velocity.x > -4) draw.item.player.velocity.x -= 1;
        if (draw.input.action.menu) draw.open(draw.layout["menu"]);
    };
    layout.update = function() {
        draw.camera(draw.item.player, draw.canvas.width / 2, draw.canvas.height / 3);
        draw.text.time.value = (Math.floor(draw.frame / 100) < 10 ? "0" : "") + Math.floor(draw.frame / 100);
        draw.text.time.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.time.width / 2;
        draw.text.time.y = draw.viewport.y + draw.canvas.height - draw.text.time.height * 2;
        draw.text.index.x = draw.viewport.x + draw.canvas.width - draw.text.index.width - 40 - 10;
        draw.text.index.y = draw.viewport.y + 40 + 10;
        draw.text.information.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.information.width / 2;
        draw.text.information.y = draw.viewport.y + draw.canvas.height / 2 - draw.text.information.height / 2;
        draw.input.button.menu.x = draw.viewport.x + 40; draw.input.button.menu.y = draw.viewport.y + 40;
        draw.input.button.left.x = draw.viewport.x + draw.input.button.left.width + 20;
        draw.input.button.left.y = draw.viewport.y + draw.canvas.height - draw.input.button.left.height * 2;
        draw.input.button.right.x = draw.viewport.x + draw.input.button.right.width * 3 + 20;
        draw.input.button.right.y = draw.viewport.y + draw.canvas.height - draw.input.button.right.height * 2;
        draw.input.button.up.x = draw.viewport.x + draw.canvas.width - draw.input.button.up.width * 4 - 20;
        draw.input.button.up.y = draw.viewport.y + draw.canvas.height - draw.input.button.up.height * 2;
        draw.input.button.fire.x = draw.viewport.x + draw.canvas.width - draw.input.button.fire.width * 2 - 20;
        draw.input.button.fire.y = draw.viewport.y + draw.canvas.height - draw.input.button.fire.height * 2;
        draw.item.player.move();
        draw.item.player.grounded = false;
        draw.item.environment.update();
        draw.item.environment.each.forEach(function(environment) {
            if (environment.id == 1) {
                var direction = draw.collision(draw.item.player, environment);
                if (direction == Align.LEFT || direction == Align.RIGHT) {
                    draw.item.player.velocity.x = 0;
                } else if (direction == Align.BOTTOM) {
                    draw.item.player.jumping = false;
                    draw.item.player.grounded = true;
                } else if (direction == Align.TOP) {
                    draw.item.player.velocity.y *= -1;
                }
                draw.item.fire.forEach(function(fire, index, array) {
                    if (draw.intersection(fire, environment)) array.splice(index, 1);
                });
            } else if (environment.id == 3) {
                if (draw.intersection(draw.item.player, environment)) draw.action.stop = true;
            } else if (environment.id == 4) {
                if (draw.intersection(draw.item.player, environment)) draw.action.next = true;
            }
            if (environment.id == 1 || environment.id == 5) {
                draw.item.enemy.forEach(function(enemy) {
                    var direction = draw.collision(enemy, environment);
                    if (direction == Align.LEFT || direction == Align.RIGHT) enemy.speed = -enemy.speed;
                });
            }
        });
        draw.item.enemy.forEach(function(value) {
            value.move();
            if (draw.intersection(value, draw.item.player)) draw.action.stop = true;
        });
        draw.item.fire.forEach(function(value, index, array) {
            value.move();
            draw.item.enemy.forEach(function(enemy, i, fire) {
                if (draw.intersection(value, enemy)) { enemy.energy -= 10; array.splice(index, 1); }
                if (enemy.energy < 0) fire.splice(i, 1);
            });
        });
        if (Math.floor(draw.frame / 100) >= 10) draw.action.timeout = true;
        if (draw.item.player.grounded) draw.item.player.velocity.y = 0;
        if (draw.item.player.y > draw.height) draw.action.stop = true;
        if (draw.action.stop) draw.item.player.color = Color.BRICK;
        if (draw.action.stop) draw.text.information.value = "GAMEOVER";
        if (draw.action.timeout) draw.text.information.value = "TIMEOUT";
        if (draw.action.next) { draw.text.information.value = "COMPLETE"; draw.frame = 0; }
        if (draw.action.next) if (draw.item.next.fade >= 2) { draw.input.index += 1; if (draw.input.index > Number(Cache.get("index"))) Cache.set("index", draw.input.index); }
        if (draw.action.next) if (draw.item.next.fade < 2) draw.item.next.fade += 0.05; else layout.start();
        if (draw.action.stop || draw.action.timeout) if (draw.ad > 0 && draw.ad % 6 == 0) if ("Ad" in window) Ad.publish();
        if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade >= 2) draw.ad++;
        if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade < 2) draw.item.stop.fade += 0.05; else layout.start();
        draw.each = new Array();
        draw.each.push(draw.item.background);
        draw.each.push(draw.item.environment);
        draw.each.push(draw.item.player);
        draw.item.fire.forEach(function(value) {
            draw.each.push(value);
        });
        draw.item.enemy.forEach(function(value) {
            draw.each.push(value);
        });
        draw.each.push(draw.text.time);
        draw.each.push(draw.text.index);
        draw.each.push(draw.input.button.menu);
        draw.each.push(draw.input.button.left);
        draw.each.push(draw.input.button.right);
        draw.each.push(draw.input.button.up);
        draw.each.push(draw.input.button.fire);
        if (draw.action.next) draw.each.push(draw.item.next);
        if (draw.action.stop || draw.action.timeout) draw.each.push(draw.item.stop);
        if (draw.action.stop || draw.action.next || draw.action.timeout) draw.each.push(draw.text.information);
    };
    layout.render = function() {
        draw.clear();
        draw.each.forEach(function(value) {
            if (value && value.render) value.render();
        });
    };
    return layout;
};


Umechukua android, ukaweka webview kwenye MainActivity, then kwenye hiyo webview ukatengeneza HTML file, ukatumia JavaScript canvas kuchora kila kitu kinachoonekana kwenye game. Hakuna engine hakuna nini, ni just simple JavaScript kua move hapa kua na color hii basi.

Hii hapa game.js file

Code:
draw.layout["game"] = function() {
    var layout = new Object();
    layout.start = function() {
        draw.input.into(draw.canvas).gamepad().keydown().keyup().touchmove().touchdown().touchup();
        draw.input.index = Number(Cache.get("index")); draw.input.index = (draw.input.index >= 14 ? 0 : draw.input.index);
        draw.item.background = new Object();
        draw.item.background.render = function() {
            draw.fill(Color.DARK).rectangle(0, 0, draw.width, draw.height);
        };
        draw.item.animation = new Object();
        draw.item.animation.particles = new Array();
        for (var i = 0; i < 100; i++) {
            draw.item.animation.particles.push({
                x: Random(draw.canvas.width),
                y: Random(draw.canvas.height - 40),
                speed: Random(4, 10),
                size: 40
            });
        }
        draw.item.animation.update = function() {
            for (var i = 0; i < this.particles.length; i++) {
                var particle = this.particles[i];
                if (i % 2) particle.x += particle.speed; else particle.x -= particle.speed;
                if (particle.x < -particle.size) particle.x = draw.canvas.width + particle.size;
                if (particle.y < -particle.size) particle.y = draw.canvas.height + particle.size;
                if (particle.x > draw.canvas.width + particle.size) particle.x = -particle.size;
                if (particle.y > draw.canvas.height + particle.size) particle.y = -particle.size;
            }
        };
        draw.item.animation.render = function() {
            draw.fill(Color.GREY);
            for (var i = 0; i < this.particles.length; i++) {
                var particle = this.particles[i];
                draw.rectangle(particle.x, particle.y, particle.size, particle.size);
            }
        };
        draw.text.name = draw.print();
        draw.text.name.size = 8;
        draw.text.name.padding = 8;
        draw.text.name.color = Color.GREY;
        draw.text.name.value = "PIXELPUNK";
        draw.text.name.background.size = 8;
        draw.text.name.background.color = Color.DARK;
        draw.text.name.background.border = Color.GREY;
    };
    layout.input = function() {
        if (draw.input.keys.length || draw.input.touches.length || draw.input.pad(0, 10)) draw.open(draw.layout["menu"]);
    };
    layout.update = function() {
        draw.item.animation.update();
        if (draw.load) draw.text.name.color = Color.WHITE;
        if (draw.load) draw.text.name.background.border = Color.WHITE;
        draw.text.name.x = draw.canvas.width / 2 - draw.text.name.width / 2;
        draw.text.name.y = draw.canvas.height / 2 - draw.text.name.height / 2;
        draw.each = new Array();
        draw.each.push(draw.item.background);
        draw.each.push(draw.item.animation);
        draw.each.push(draw.text.name);
    };
    layout.render = function() {
        draw.clear();
        draw.each.forEach(function(value) {
            if (value) value.render();
        });
    };
    return layout;
};

Nimeanza hadi ku-doubt kua hiyo code umeandika mwenyewe coz kuna parts nyingi ni very clean, ila kama umeandika yote mwenyewe then nitakuponngeza coz napenda clean JavaScript. Japo acha kutudanganya, it's not a good thing tupo hapa tunakukamata uongo wako anytime.

Kama unataka files zote za JS ulizoandika sema tukuletee hapa.
I even doubt umeandika though. Nategemea uje na fix nyingine kua language yako ukicompile inaproduce hizi code zote hahaha nitacheka balaa.
 
Baada ya kuchunguza code vizuri pia nimegundua kitu kimoja, hata hizo code nilizokuonyesha hapo juu ni za JavaScript engine ya mtu mwingine so hata zenyewe sio zako duh! Umechukua engine ambayo inatumia webview kurender kwenye mobile phone ukasema ni yako na language umetengeneza mwenyewe, hahaha man acha utoto.

Nadhani discussion imeisha, tumeshakushika case closed. Tukiendelea kubishana kuhusu hili nitakublock tu maana sijui utakuja na explanation gani code zote nimezipata ziko wazi na hata kuminify hukufanya hivyo.
 

Moderator wa huu mtanange niko hapa, tunasubiri counter attack kutoka kwa kijana machachari Hackboy.

Ndo kwanza tuko round ya 4.
 
Nilichofanya nimeanza kutengeneza game engine ya pure javascript ya 2d canvas for webview nakuitengenezea compiler ambayo ina compile my language to javascript kuweza ku call functions za game engine yangu ambayo in javascript. Pia natengeneza engine ambayo iko in java ili niache kutumia webview, nlishaanza kuitengeneza kitambo inatumia 2d canvas ya android java. Pia nimetengeneza framework yakutengeneza apps za android bila xml for layout na sio za webview. Zinatumia pure java mfano LinearLayout layout = new LinearLayout(this);
 
Mwanangu unafanya nijikubali sana kwa maana imekuwa ngumu sana kuamini izo code nimeandika mimi. Kama unahisi nime copy embu nionyeshe wapi nime copy?
 

Naona umeanza kutubadilishia story, basi aisee naishia hapa, ulianza kutuambia umetengeneza language yako mwenyewe, ukatengeneza engine yako mwenyewe, sasa hivi unabadilisha kusema umetumia pure javascript kutengeneza game engine hahaha. Then umeanza kusema inatumia 2D canvas ya Android.

Come on man which is which? mbona maelezo kibao ambayo ni inconsistent? Alafu unabadili story unakuja kutuambia una app ya kutengeneza android UI bila webview, hahaha kwani toka Android ianzishwe uliambiwa ni lazima kutumia XML? Hujawahi sikia dynamic views? toka Android 1.0 tulikua tunatengeneza UI kwa kutumia pure Java, 10 years later sio hata discussion hiyo, XML ni basi tu tunatumia kama inarahisisha mambo ila sio lazima.

Mkuu nimegundua kitu kimoja, bado upo shallow sana, kama ushauri tu acha uongo, acha kujidai, kaa endelea kukomaa, mwanzo mzuri utafika mbali ukiendelea kujituma, nakupongeza kwa kuonyesha bidii na nnipo tayari kukupa support coz napenda kuona programmers bongo. Just stop lying to people kua unajua kufanya kitu flani huku hujui, umetuma hadi code unasema umetengeneza compiler alafu sasa hivi nimekushika uanjifanya kubadilisha kusema umetumia JavaScript? hahaha man ningekua wewe ningeacha kujibu kabisa nikapotea coz unazidi kujiharibia. Nitakuja kukutajia hadi game engine uliyotumia utafute excuse nyingine.

Stop it.
 

Similar Discussions

Cookies are required to use this site. You must accept them to continue using the site. Learn more…