井字游戏游戏问题与计算机移动

时间:2020-09-05 10:12:07

标签: javascript html css

我正在写井字游戏,因为我创建了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;
    })
  });
}

}

2 个答案:

答案 0 :(得分:0)

您可以在numsuserMove()的{​​{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,因为它代表第一个图块,并且计算机应该能够播放该图块。

您还需要检查计算机是否应该完全播放-是否还有空块。

I made some edits to your codepen.