起初我想为我糟糕的英语道歉。
我在JavaScript中制作了tic tac toe,但重新加载游戏并不适合我。我做了一个这样的按钮: $('#bug-form').submit(function(){
//append your bug id to the action url
var updateUrl = $(this).attr('action') +$('#bug_id').val();
//update your action url of the form
$(this).attr('action',updateUrl);
});
我的脚本看起来像这样:
<button onclick="restart()"> Opnieuw! </button>
当我尝试点击按钮时,我得到:
未捕获的ReferenceError:未定义重启[chrome]
我需要在我的canvas函数中放置重启函数以获取值的概率。那么有谁知道我做错了什么?
这是我的整个代码(在整页中运行代码段以实现游戏的正常运行):
function Canvas(){
/* other functions */
function restart(){
}
}
&#13;
/*
---------------------------
Door Thomas Pereira,
6-5-2015, 14:00, NL
---------------------------
*/
function Canvas() {
var ctx = document.getElementById('game').getContext('2d');
var cw = ctx.canvas.width,
ch = ctx.canvas.height;
var snelheid = 1;
var linewidth = 6;
var fSmall = 0.3;
var fout = -1;
var apl = {};
apl.speak = function(line) {
console.log(line);
};
function tekenkruis(x, y, w, h) {
ctx.beginPath();
x += w * (fSmall * 0.5);
y += h * (fSmall * 0.5);
w -= w * fSmall;
h -= h * fSmall;
ctx.moveTo(x, y);
ctx.lineTo(x + w, y + h);
ctx.moveTo(x + w, y);
ctx.lineTo(x, y + h);
ctx.lineWidth = linewidth;
ctx.stroke();
}
function tekencirkel(x, y, w, h) {
ctx.beginPath();
x += w * (fSmall * 0.5);
y += h * (fSmall * 0.5);
w -= w * fSmall;
h -= h * fSmall;
ctx.arc(x + (w * 0.5), y + (h * 0.5), w * 0.5, 0, 2 * Math.PI, false);
ctx.lineWidth = linewidth;
ctx.stroke();
}
function random(min, max, t, niet) {
var num = Math.floor(Math.random() * (max - min + 1) + min);
if (t) {
for (var i = "fout"; i == even_odd(num, t, niet); i) {
var num = Math.floor(Math.random() * (max - min + 1) + min);
}
return num;
} else {
return num;
}
}
function even_odd(num, t, niet) {
if (num % 2 == 0 && t == "even" && num != niet || num % 2 == 1 && t == "odd" && num != niet) {
return num;
} else {
return "fout";
}
}
function checkbestaan(z) {
var q = invullen.plaatsen[z];
if (q.kruis != "on" && q.cirkel != "on") {
return z;
} else {
return "fout"
}
}
/* Main Functions */
function background() {
this.w = cw, this.h = ch, this.x = 0, this.y = 0, this.color = "#F4F4F5";
this.draw = function() {
//draw
ctx.fillStyle = this.color;
ctx.fillRect(this.x, this.y, this.w, this.h);
ctx.beginPath();
ctx.moveTo(0, (1 / 3) * ch);
ctx.lineTo(cw, (1 / 3) * ch);
ctx.moveTo(0, (2 / 3) * ch);
ctx.lineTo(cw, (2 / 3) * ch);
ctx.moveTo((1 / 3) * cw, 0);
ctx.lineTo((1 / 3) * cw, ch);
ctx.moveTo((2 / 3) * cw, 0);
ctx.lineTo((2 / 3) * cw, ch);
ctx.lineWidth = linewidth;
ctx.stroke();
}
}
function invullen() {
this.x = fout;
this.y = fout;
this.call = "on";
this.tel = 0;
this.kansplaatsen = [];
this.tel2 = 0;
this.plaatsen = [{
"naam": 1,
"x": 0,
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 2,
"x": cw * (1 / 3),
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 3,
"x": cw * (2 / 3),
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 8,
"x": 0,
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": "fout",
"x": cw * (1 / 3),
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 4,
"x": cw * (2 / 3),
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 7,
"x": 0,
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 6,
"x": cw * (1 / 3),
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 5,
"x": cw * (2 / 3),
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, ];
this.win = [{
"plek1": 0,
"plek2": 1,
"plek3": 2
}, {
"plek1": 3,
"plek2": 4,
"plek3": 5
}, {
"plek1": 6,
"plek2": 7,
"plek3": 8
}, {
"plek1": 0,
"plek2": 3,
"plek3": 6
}, {
"plek1": 1,
"plek2": 4,
"plek3": 7
}, {
"plek1": 2,
"plek2": 5,
"plek3": 8
}, {
"plek1": 0,
"plek2": 4,
"plek3": 8
}, {
"plek1": 2,
"plek2": 4,
"plek3": 6
}, ];
this.wandplaatsen = [{
"plek": "undefined"
}, {
"plek": 0
}, {
"plek": 1
}, {
"plek": 2
}, {
"plek": 5
}, {
"plek": 8
}, {
"plek": 7
}, {
"plek": 6
}, {
"plek": 3
}, ];
this.draw = function() {
//check of er in een vak geklikt is
for (var i = 0; i < this.plaatsen.length; i++) {
var k = this.plaatsen[i]
if (this.x >= k.x && this.x <= k.x + k.w && this.y >= k.y && this.y <= k.y + k.h && k.cirkel != "on" && k.kruis != "on") {
k.kruis = "on";
this.call = "on";
this.stap = i;
}
}
this.x = fout;
this.y = fout; //schakel klik uit
//als er geklikt is de PC
if (this.call == "on") {
this.tel++
this.checklaatste = this.laatste;
loop1:
for (var i = 1; i == 1; i) {
loop2: for (var i = 1; i < this.wandplaatsen.length; i++) {
var k = this.wandplaatsen[i];
if (i + 1 > 8) {
var de = i + 1 - 8;
} else {
var de = i + 1;
};
var d = this.wandplaatsen[de];
if (i - 1 < 1) {
var ce = i - 1 + 8;
} else {
var ce = i - 1;
};
var c = this.wandplaatsen[ce];
if (i + 2 > 8) {
var re = i + 2 - 8;
} else {
var re = i + 2;
};
var r = this.wandplaatsen[re];
if (i - 2 < 1) {
var qe = i - 2 + 8;
} else {
var qe = i - 2;
};
var q = this.wandplaatsen[qe];
if (i + 4 > 8) {
var ye = i + 4 - 8
} else {
var ye = i + 4
};
var y = this.wandplaatsen[ye];
if (i - 4 < 1) {
var we = i - 4 + 8
} else {
var we = i - 4
};
var w = this.wandplaatsen[we];
apl.speak("Niewe i is: " + i + " - " + this.plaatsen[k.plek].cirkel);
if (this.plaatsen[k.plek].cirkel == "on") {
if (i % 2 == 1) {
apl.speak("door " + i);
if (this.plaatsen[d.plek].cirkel == "on") {
if (i + 2 > 8) {
var g = i + 2 - 8;
} else {
var g = i + 2;
};
apl.speak("hier zijn we d: " + checkbestaan(this.wandplaatsen[g].plek));
if (checkbestaan(this.wandplaatsen[g].plek) != "fout") {
this.plaatsen[this.wandplaatsen[g].plek].cirkel = "on";
this.laatste = this.wandplaatsen[g].plek;
this.call = "off";
break loop1;
};
}
if (this.plaatsen[c.plek].cirkel == "on") {
if (i - 2 < 1) {
var ge = i - 2 + 8;
} else {
var ge = i - 2;
};
apl.speak("hier zijn we c: " + checkbestaan(this.wandplaatsen[ge].plek));
if (checkbestaan(this.wandplaatsen[ge].plek) != "fout") {
apl.speak("hier zijn we c: done: " + i);
this.plaatsen[this.wandplaatsen[ge].plek].cirkel = "on";
this.laatste = this.wandplaatsen[ge].plek;
this.call = "off";
break loop1;
};
}
if (this.plaatsen[r.plek].cirkel == "on") {
if (i + 1 > 8) {
var ge = i + 1 - 8;
} else {
var ge = i + 1;
};
apl.speak("hier zijn we r: " + checkbestaan(this.wandplaatsen[ge].plek));
if (checkbestaan(this.wandplaatsen[ge].plek) != "fout") {
this.plaatsen[this.wandplaatsen[ge].plek].cirkel = "on";
this.laatste = this.wandplaatsen[ge].plek;
this.call = "off";
break loop1;
};
}
if (this.plaatsen[q.plek].cirkel == "on") {
if (i - 1 < 1) {
var ge = i - 1 + 8;
} else {
var ge = i - 1;
};
/*apl.speak("hier zijn we q: "+checkbestaan(this.wandplaatsen[ge].plek));*/
if (checkbestaan(this.wandplaatsen[ge].plek) != "fout") {
this.plaatsen[this.wandplaatsen[ge].plek].cirkel = "on";
this.laatste = this.wandplaatsen[ge].plek;
this.call = "off";
break loop1;
};
}
if (this.plaatsen[w.plek].cirkel == "on") {
var g = 4;
apl.speak("hier zijn we wr: " + checkbestaan(g));
if (checkbestaan(g) != "fout") {
this.plaatsen[g].cirkel = "on";
this.laatste = g;
this.call = "off";
break loop1;
};
}
if (this.plaatsen[y.plek].cirkel == "on") {
var g = 4;
apl.speak("hier zijn we yr: " + checkbestaan(g));
if (checkbestaan(g) != "fout") {
this.plaatsen[g].cirkel = "on";
this.laatste = g;
this.call = "off";
break loop1;
};
}
}
/* if( i % 2 == 0 ){
apl.speak("door even"+ i);
if( this.plaatsen[w.plek].cirkel == "on" && this.call == "on" ){
if( i-4 < 1 ){ var g = 8-Math.abs(i-4); } else { var g = i-4; };
apl.speak("hier zijn we w: "+checkbestaan(this.wandplaatsen[g].plek));
if( checkbestaan(this.wandplaatsen[g].plek) != "fout" ){
this.plaatsen[this.wandplaatsen[g].plek].cirkel = "on";
this.laatste = this.wandplaatsen[g].plek;
this.call = "off";
};
}
if( this.plaatsen[y.plek].cirkel == "on" && this.call == "on" ){
if( i+4 > 8 ){ var g = i+4-8; } else { var g = i+4; };
apl.speak("hier zijn we y: "+checkbestaan(this.wandplaatsen[g].plek));
if( checkbestaan(this.wandplaatsen[g].plek) != "fout" ){
this.plaatsen[this.wandplaatsen[g].plek].cirkel = "on";
this.laatste = this.wandplaatsen[g].plek;
this.call = "off";
};
}
} */
}
}
for (var i = 1; i < this.wandplaatsen.length; i++) {
var k = this.wandplaatsen[i];
if (i - 4 < 1) {
var we = i - 4 + 8
} else {
var we = i - 4
};
var w = this.wandplaatsen[we];
if (this.plaatsen[k.plek].kruis == "on" && i % 2 == 0) {
apl.speak("door even : " + i)
if (this.plaatsen[4].kruis == "on") {
apl.speak("hier zijn we 4: " + checkbestaan(w.plek));
if (checkbestaan(w.plek) != "fout") {
this.plaatsen[w.plek].cirkel = "on";
this.laatste = w.plek;
this.call = "off";
break loop1;
}
}
if (this.plaatsen[w.plek].kruis == "on") {
apl.speak("hier zijn we w.plek: " + checkbestaan(4));
if (checkbestaan(4) != "fout") {
this.plaatsen[4].cirkel = "on";
this.laatste = 4;
this.call = "off";
break loop1;
}
}
}
}
break loop1;
}
apl.speak("--------------------------");
if (this.checklaatste != this.laatste) {
this.call = "off"
};
if (this.tel == 1 && this.call == "on") {
this.stap1 = random(0, 8, "even", 4);
for (var i = "fout"; i == checkbestaan(this.stap1); i) {
this.stap1 = random(0, 8, "even", 4);
};
this.plaatsen[this.stap1].cirkel = "on";
this.call = "off";
this.laatste = this.stap1;
} else if (this.tel == 2 && this.call == "on") {
var g = this.plaatsen[this.stap1].naam + 4;
if (g > 8) {
var g = g - 8;
}
var c = this.plaatsen[this.stap1].naam + 1;
var d = this.plaatsen[this.stap1].naam - 1;
if (d > 8) {
var d = d - 8;
}
if (this.stap != 4 || checkbestaan(this.wandplaatsen[g].plek) == "fout") {
this.stap2 = random(0, 8, "even", 4)
for (var i = "fout"; i == checkbestaan(this.stap2); i) {
this.stap2 = random(0, 8, "even", 4)
};
} else {
this.stap2 = this.wandplaatsen[g].plek;
}
this.plaatsen[this.stap2].cirkel = "on";
this.call = "off";
this.laatste = this.stap2;
} else if (this.tel == 3 && this.call == "on") {
this.stap3 = random(0, 8, "even", 4)
for (var i = "fout"; i == checkbestaan(this.stap3); i) {
this.stap3 = random(0, 8, "even", 4)
this.tel2++;
if (this.tel2 > 1000) {
this.tel2 = 0;
this.stap3 = random(0, 8);
for (var i = "fout"; i == checkbestaan(this.stap3); i) {
this.stap3 = random(0, 8);
};
};
};
this.plaatsen[this.stap3].cirkel = "on";
this.call = "off";
this.laatste = this.stap3;
} else if (this.tel == 4 && this.call == "on") {
this.stap4 = random(0, 8, "even", 4)
for (var i = "fout"; i == checkbestaan(this.stap4); i) {
this.stap4 = random(0, 8, "even", 4);
this.tel2++;
if (this.tel2 > 1000) {
this.tel2 = 0;
this.stap4 = random(0, 8);
for (var i = "fout"; i == checkbestaan(this.stap4); i) {
this.stap4 = random(0, 8);
};
};
}
this.plaatsen[this.stap4].cirkel = "on";
this.call = "off";
this.laatste = this.stap4;
} else if (this.call == "on") {
var q = random(0, 8);
for (var i = "fout"; i == checkbestaan(q); i) {
var q = random(0, 8);
};
this.plaatsen[q].cirkel = "on"
this.call = "off";
this.laatste = q;
}
}
//teken
for (var i = 0; i < this.plaatsen.length; i++) {
var k = this.plaatsen[i];
if (k.kruis == "on") {
tekenkruis(k.x, k.y, k.w, k.h)
}
}
for (var i = 0; i < this.plaatsen.length; i++) {
var k = this.plaatsen[i];
if (k.cirkel == "on") {
tekencirkel(k.x, k.y, k.w, k.h)
};
}
}
}
function checkwin() {
this.done = "false"
this.draw = function() {
for (var i = 0; i < invullen.win.length; i++) {
if (invullen.plaatsen[invullen.win[i].plek1].kruis == "on" && invullen.plaatsen[invullen.win[i].plek2].kruis == "on" && invullen.plaatsen[invullen.win[i].plek3].kruis == "on") {
invullen.plaatsen[invullen.laatste].cirkel = "off";
for (var i = 0; i < invullen.plaatsen.length; i++) {
var k = invullen.plaatsen[i];
if (k.cirkel == "on") {
tekencirkel(k.x, k.y, k.w, k.h)
};
}
ctx.font = "17px Arial";
ctx.textBaseline = "middle";
ctx.fillStyle = "black";
var text = " Jij hebt gewonnen!!"
ctx.fillText(text, 20, 20);
clearInterval(animateInterval);
this.done = "true"
}
}
for (var i = 0; i < invullen.win.length; i++) {
if (this.done != "true" && invullen.plaatsen[invullen.win[i].plek1].cirkel == "on" && invullen.plaatsen[invullen.win[i].plek2].cirkel == "on" && invullen.plaatsen[invullen.win[i].plek3].cirkel == "on") {
ctx.font = "17px Arial";
ctx.textBaseline = "middle";
ctx.fillStyle = "black";
var text = "De PC heeft gewonnen, jammer"
ctx.fillText(text, 20, 20);
clearInterval(animateInterval);
}
}
}
}
var background = new background();
var invullen = new invullen();
var checkwin = new checkwin();
function draw() {
ctx.save();
ctx.clearRect(0, 0, cw, ch);
//draw
background.draw();
invullen.draw();
checkwin.draw();
ctx.restore();
}
var animateInterval = setInterval(draw, snelheid);
ctx.canvas.addEventListener('click', function(event) {
invullen.x = event.clientX - ctx.canvas.offsetLeft;
invullen.y = event.clientY - ctx.canvas.offsetTop;
});
function restart() {
background.w = cw, background.h = ch, background.x = 0, background.y = 0, background.color = "#F4F4F5";
invullen.x = fout;
invullen.y = fout;
invullen.call = "on";
invullen.tel = 0;
invullen.kansplaatsen = [];
invullen.tel2 = 0;
invullen.plaatsen = [{
"naam": 1,
"x": 0,
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 2,
"x": cw * (1 / 3),
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 3,
"x": cw * (2 / 3),
"y": 0,
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 8,
"x": 0,
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": "fout",
"x": cw * (1 / 3),
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 4,
"x": cw * (2 / 3),
"y": ch * (1 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 7,
"x": 0,
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 6,
"x": cw * (1 / 3),
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, {
"naam": 5,
"x": cw * (2 / 3),
"y": ch * (2 / 3),
"w": cw * (1 / 3),
"h": ch * (1 / 3),
"kruis": "off",
"cirkel": "off"
}, ];
invullen.win = [{
"plek1": 0,
"plek2": 1,
"plek3": 2
}, {
"plek1": 3,
"plek2": 4,
"plek3": 5
}, {
"plek1": 6,
"plek2": 7,
"plek3": 8
}, {
"plek1": 0,
"plek2": 3,
"plek3": 6
}, {
"plek1": 1,
"plek2": 4,
"plek3": 7
}, {
"plek1": 2,
"plek2": 5,
"plek3": 8
}, {
"plek1": 0,
"plek2": 4,
"plek3": 8
}, {
"plek1": 2,
"plek2": 4,
"plek3": 6
}, ];
invullen.wandplaatsen = [{
"plek": "undefined"
}, {
"plek": 0
}, {
"plek": 1
}, {
"plek": 2
}, {
"plek": 5
}, {
"plek": 8
}, {
"plek": 7
}, {
"plek": 6
}, {
"plek": 3
}, ];
checkwin.done = "false"
}
};
window.addEventListener('load', function(event) {
Canvas();
});
&#13;
#game {
width: 500px;
height: 500px;
}
&#13;
答案 0 :(得分:2)
您必须在全局上下文中声明restart
才能从按钮访问它。
如果必须声明Canvas
函数替换
function replace(){
//your code
}
没有var
:
restart = function(){
//your same code
}
这将访问canvas
函数中的局部变量并将其全局声明。
答案 1 :(得分:2)
你可以这样做:
Final Date
然后:
function Canvas(){
/* other functions */
this.restart = function(){
}
}
通过这种方式,您可以将函数调用到上下文画布中。因为,var canvas = new Canvas();
button.onclick = function() {
canvas.restart();
}
现在是属于this.restart