Skip to content

Instantly share code, notes, and snippets.

View alexroan's full-sized avatar

Alex Roan alexroan

View GitHub Profile
@alexroan
alexroan / Ethermon.sol
Created March 27, 2020 15:56
ethermon.sol@4
pragma solidity ^0.5.5;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract Ethermon is ERC721 {
struct Monster {
string name;
uint level;
}
@alexroan
alexroan / TennisPlayerBase.sol
Last active March 28, 2020 16:11
tennis-player.sol@1
// Author: Alex Roan
pragma solidity ^0.5.5;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
// TennisPlayer ERC721 Token
contract TennisPlayerBase is ERC721, Ownable {
// Player information
@alexroan
alexroan / TrainableTennisPlayer.sol
Created March 28, 2020 17:03
TrainableTennisPlayer.sol@1
// Author: Alex Roan
pragma solidity ^0.5.5;
import "./TennisPlayerBase.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/utils/SafeCast.sol";
contract TrainableTennisPlayer is TennisPlayerBase {
@alexroan
alexroan / TennisPlayerBase.sol
Created March 30, 2020 09:08
TennisPlayerBase.sol@2
// Author: Alex Roan
pragma solidity ^0.5.5;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/utils/SafeCast.sol";
// TennisPlayer ERC721 Token
contract TennisPlayerBase is ERC721, Ownable {
@alexroan
alexroan / TrainableTennisPlayer.sol
Created March 30, 2020 09:10
TrainableTennisPlayer.sol@2
// Author: Alex Roan
pragma solidity ^0.5.5;
import "./TennisPlayerBase.sol";
contract TrainableTennisPlayer is TennisPlayerBase {
// TODO - xp costs to change depending on current attribute level?
// Training costs
@alexroan
alexroan / CompetingTennisPlayer.sol
Created March 30, 2020 11:38
CompetingTennisPlayer.sol@2
// Author: Alex Roan
pragma solidity ^0.5.5;
import "./TennisPlayerBase.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/utils/SafeCast.sol";
contract CompetingTennisPlayer is TennisPlayerBase {
using SafeMath for uint;
@alexroan
alexroan / TennisPlayer.sol
Created April 1, 2020 17:43
TennisPlayer.sol@3
// Author: Alex Roan
pragma solidity ^0.5.5;
import "./CompetingTennisPlayer.sol";
import "./TrainableTennisPlayer.sol";
contract TennisPlayer is CompetingTennisPlayer, TrainableTennisPlayer {
function myPlayers() public view returns (uint[] memory) {
return _tokensOfOwner(msg.sender);
@alexroan
alexroan / Game.sol
Created April 1, 2020 17:50
Game.sol@3
// Author: Alex Roan
pragma solidity ^0.5.5;
import "./TennisPlayer.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
contract Game is Ownable {
address public playerTokenAddress;
@alexroan
alexroan / PlayerList.js
Created April 2, 2020 10:12
PlayerList.js@3
import React, {Component} from 'react';
import {connect} from 'react-redux';
import { tennisPlayerSelector, accountLoadedSelector, gameLoadedSelector, tennisPlayerLoadedSelector, accountSelector, ownedPlayersSelector, newPlayerNameSelector, newPlayerAgeSelector, newPlayerHeightSelector, gameSelector } from './redux/selectors';
import { newPlayerNameChange, newPlayerAgeChange, newPlayerHeightChange} from "./redux/actions";
import { createNewPlayer, loadSelectedPlayer } from './redux/interactions';
const playerSelected = (props, id) => {
console.log(id);
const {dispatch, tennisPlayer} = props;
loadSelectedPlayer(dispatch, tennisPlayer, id);
@alexroan
alexroan / PlayerDetails.js
Created April 2, 2020 10:19
PlayerDetails.js@3
import React, {Component} from 'react';
import {connect} from 'react-redux';
import { selectedPlayerDetailsSelector } from './redux/selectors';
const getPlayerDetails = (props) => {
const {playerDetails} = props;
return (
<ul className="list-group list-group-flush">
<li key="xp" className="list-group-item">{playerDetails.xp}</li>
<li key="name" className="list-group-item">{playerDetails.name}</li>