/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk

« back to all changes in this revision

Viewing changes to src/libvqdr/dice.vala

  • Committer: Gustav Hartvigsson
  • Date: 2020-06-07 18:48:24 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20200607184824-jf14f7a1b1di2i2q
* Initial code - far from done

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* dice.vala
2
 
 *
3
 
 * Copyright 2021 Gustav Hartvigsson <unknown@domain.org>
4
 
 *
5
 
 * This file is free software; you can redistribute it and/or modify it
6
 
 * under the terms of the GNU Lesser General Public License as
7
 
 * published by the Free Software Foundation; either version 3 of the
8
 
 * License, or (at your option) any later version.
9
 
 *
10
 
 * This file is distributed in the hope that it will be useful, but
11
 
 * WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 
 * Lesser General Public License for more details.
14
 
 *
15
 
 * You should have received a copy of the GNU Lesser General Public
16
 
 * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
 
 *
18
 
 * SPDX-License-Identifier: LGPL-3.0-or-later
19
 
 */
20
 
 
21
1
using GLib;
22
2
 
23
 
/**
24
 
 * A Simple Represetation of a dice.
25
 
 */
26
 
public class VQDR.Expression.Dice {
27
 
  public int times { get; set; }
28
 
  public int faces { get; set; }
29
 
  public int modifier { get; set; }
30
 
  
31
 
  
32
 
  public Dice (int times = 1, int faces = 6, int modifier = 0) {
33
 
    this.times = times;
34
 
    this.faces = faces;
35
 
    this.modifier = modifier;
36
 
  }
37
 
  
38
 
  public Dice.singel (int faces) {
39
 
    this.times = 1;
40
 
    this.faces = faces;
41
 
    this.modifier = 0;
42
 
  }
43
 
  
44
 
  public int roll () {
45
 
    if (faces <= 0) {
46
 
      return modifier;
 
3
namespace VQDR.Expression {
 
4
  
 
5
  /**
 
6
   * A Simple Represetation of a dice.
 
7
   */
 
8
  public class Dice {
 
9
    public int times { get; set; }
 
10
    public int faces { get; set; }
 
11
    public int modifier { get; set; }
 
12
    
 
13
    
 
14
    public Dice (int times = 1, int faces = 6, int modifier = 0) {
 
15
      this.times = times;
 
16
      this.faces = faces;
 
17
      this.modifier = modifier;
47
18
    }
48
19
    
49
 
    if (times <= 0) {
 
20
    public int roll () {
 
21
      if (faces <= 0) {
50
22
        return modifier;
51
 
    }
52
 
    
53
 
    if (faces == 1) {
54
 
      return times + modifier;
55
 
    }
56
 
    
57
 
    int retval = modifier;
58
 
    for (size_t i = 1; i <= times; i++) {
59
 
      int r = (Utils.Random.get_static_int () % faces).abs ();
60
 
      
61
 
      retval += r;
62
 
    }
63
 
    
64
 
    return retval;
65
 
  }
66
 
  
67
 
  public string to_string () {
68
 
    if ((times == 0) && (faces == 0)) {
69
 
      return "0";
70
 
    }
71
 
    
72
 
    StringBuilder retval = new StringBuilder ();
73
 
    
74
 
    if (times > 0) {
75
 
      retval.append (times.to_string ()).append_c ('d').append (faces.to_string ());
76
 
    }
77
 
    if (modifier > 0) {
78
 
        retval.append_c ('+').append (modifier.to_string ());
79
 
    } else if (modifier < 0) {
80
 
        retval.append (modifier.to_string ());
81
 
    }
82
 
    
83
 
    return retval.str;
84
 
  }
85
 
  
 
23
      }
 
24
      
 
25
      if (times <= 0) {
 
26
          return modifier;
 
27
      }
 
28
      
 
29
      if (faces == 1) {
 
30
        return times + modifier;
 
31
      }
 
32
      
 
33
      int retval = modifier;
 
34
      for (size_t i = 1; i <= times; i++) {
 
35
        int r = (VQDR.Common.Random.get_static_int () % faces).abs ();
 
36
        retval += r;
 
37
        
 
38
      }
 
39
      
 
40
      return retval;
 
41
    }
 
42
    
 
43
    public string to_string () {
 
44
      if ((times == 0) && (faces == 0)) {
 
45
        return "0";
 
46
      }
 
47
      
 
48
      StringBuilder retval = new StringBuilder ();
 
49
      
 
50
      if (times > 0) {
 
51
        retval.append (times.to_string ()).append_c ('d').append (faces.to_string ());
 
52
      }
 
53
      if (modifier > 0) {
 
54
          retval.append_c ('+').append (modifier.to_string ());
 
55
      } else if (modifier < 0) {
 
56
          retval.append (modifier.to_string ());
 
57
      }
 
58
      
 
59
      return (string) retval.data;
 
60
    }
 
61
    
 
62
  }
86
63
}