Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. import React from 'react'
  2.  
  3. import { Card, Board } from './components'
  4. import generateBoard from './BoardGenerator'
  5. import './App.css'
  6.  
  7.  
  8. export default class App extends React.Component {
  9. state = {
  10. selectedCard: null,
  11. selectedIndex: null,
  12. cards: generateBoard()
  13. }
  14.  
  15. handleSelectedCard = (clickedCard, clickedIndex) => {
  16. const { selectedCard, selectedIndex, cards } = this.state
  17.  
  18. if (selectedCard) {
  19. // Avoid click on current card
  20. if (selectedIndex === clickedIndex) {
  21. return false
  22. }
  23.  
  24. // Flip second card
  25. const flippedCards = this.flipCards(cards, [clickedIndex])
  26.  
  27. this.setState({ cards: flippedCards })
  28.  
  29. // Match cards a second later to let user see the card
  30. setTimeout(() => {
  31. this.matchCards(clickedCard, clickedIndex)
  32. }, 1000)
  33. } else {
  34. cards[clickedIndex].revealed = true
  35.  
  36. this.setState({
  37. selectedCard: clickedCard,
  38. selectedIndex: clickedIndex,
  39. cards
  40. })
  41. }
  42. }
  43.  
  44. matchCards = (card, i) => {
  45. const { selectedCard, selectedIndex, cards } = this.state
  46.  
  47. if (!selectedCard) return false
  48.  
  49. if (selectedCard.type === card.type) {
  50. const solvedCards = cards.map(element => {
  51. if (element.type === card.type) {
  52. element.solved = true
  53. }
  54. return element
  55. })
  56.  
  57. this.setState({
  58. cards: solvedCards
  59. })
  60.  
  61. this.resetTurn()
  62. } else {
  63. const cards = this.state.cards.map((element, index) => {
  64. if (index === selectedIndex || index === i) {
  65. element.revealed = false
  66. }
  67. return element
  68. })
  69.  
  70. this.setState({
  71. cards
  72. })
  73.  
  74. this.resetTurn()
  75. }
  76. }
  77.  
  78. resetTurn = () => {
  79. this.setState({
  80. selectedCard: null,
  81. selectedIndex: null
  82. })
  83. }
  84.  
  85. flipCards = (cards, cardIndexs) => {
  86. for (let index = 0; index < cardIndexs.length; index++) {
  87. cards[cardIndexs[index]].revealed = !cards[cardIndexs[index]].revealed
  88. }
  89.  
  90. return cards
  91. }
  92.  
  93. render () {
  94. const { cards } = this.state
  95. return (
  96. <div id='gameContainer'>
  97. <div id='gameScreen'>
  98. <Board>
  99. {cards.map((card, index) => (
  100. <Card
  101. item={card}
  102. index={index}
  103. onClick={this.handleSelectedCard}
  104. />
  105. ))}
  106. </Board>
  107. </div>
  108. </div>
  109. )
  110. }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement