我正在写井字游戏,因为我创建了computerMove函数,并且负责在随机字段中创建“ O”,所以我遇到了这样的问题。但是,当有最后一个字段可供选择并且有玩家移动时,当您以玩家身份单击此字段时,另一个字段中会出现第二个“ O”。有时游戏中间会出现两个“ O”。
以下是整个项目的链接:https://codepen.io/daniel-led/pen/qBZpWZG
import { Component, OnInit, NgZone } from '@angular/core';
import { FirestoreEdcellEventsService } from 'src/app/services/firestore-edcell-events.service';
import { EdcellEvent } from 'src/app/models/edcell_event/edcell-event.model';
import { from } from 'rxjs';
@Component({
selector: 'app-home-page',
templateUrl: './home-page.component.html',
styleUrls: ['./home-page.component.css']
})
export class HomePageComponent implements OnInit {
edcell_events: EdcellEvent[];
constructor(private ngZone: NgZone, private edcell_event_sevice: FirestoreEdcellEventsService) { }
myevent: EdcellEvent = {
id: "",
title: "Title",
descrition: "Des",
link: "htttppp",
img: "htpsjpg",
};
submit() {
this.edcell_event_sevice.createEvent(this.myevent);
console.log('clicked submit');
}
ngOnInit(): void {
console.log(this.edcell_event_sevice.getEvents());
this.edcell_event_sevice.getEvents().subscribe(data => {
this.edcell_events = data.map(e => {
console.log("Data >>", e);
return {
id: e.payload.doc.id,
...e.payload.doc.data() as {},
} as EdcellEvent;
})
});
}
}
答案 0 :(得分:0)
您可以在nums
至userMove()
的{{1}}中添加池号,但要在nums[i] = i;
至randomNum()
的功能中添加池号。两种方法都应使用相同的方式。
答案 1 :(得分:0)
要详细说明戈登的答案以及为什么混用nums.push(n)
和nums[i] = i
是一个问题。nums.push(n)
总是附加在nums
的末尾,因此如果{{1} }的第三个项目将添加到末尾。 nums
是直接分配给插槽的,因此用户的移动可以覆盖计算机的移动。这就是计算机将O放置在已经播放过的插槽中的原因。始终使用nums[i] = i
将项目追加到JS中的数组。
我看到的第二个问题是push
也应该返回0,因为它代表第一个图块,并且计算机应该能够播放该图块。
您还需要检查计算机是否应该完全播放-是否还有空块。