プロジェクト

全般

プロフィール

鍛冶 ダメージ範囲 » 履歴 » バージョン 1

Noppi, 2023/12/18 11:36

1 1 Noppi
[ホーム](https://redmine.noppi.jp) - [[Wiki|DQX]]
2
# [[鍛冶 ダメージ範囲]]
3
``` scheme
4
#!r6rs
5
#!chezscheme
6
7
(import (chezscheme))
8
9
(define (make-sequence n1 n2 inc)
10
  (let loop ([current n2]
11
             [lis '()])
12
    (if (< current n1)
13
      lis
14
      (loop (- current inc) (cons current lis)))))
15
16
(define base-normal (make-sequence 12 18 1))
17
(define temperature-list (make-sequence 50 2000 50))
18
(define temperature-list-neppu (make-sequence 150 2000 50))
19
20
(define (make-2bai n) (* n 2))
21
(define base-2bai (map make-2bai base-normal))
22
23
(define (make-3bai n) (* n 3))
24
(define base-3bai (map make-3bai base-normal))
25
26
(define (make-1.2 n) (exact (floor (+ (* n 1.2) 1))))
27
(define base-1.2 (map make-1.2 base-normal))
28
29
(define (make-tekagen n) (exact (ceiling (* n 0.5))))
30
(define base-tekagen (map make-tekagen base-normal))
31
32
(define (make-midare n) (exact (floor (+ (* n 0.8) 1))))
33
(define base-midare (map make-midare base-normal))
34
35
(define (make-neppu n) (exact (ceiling (* n 2.5))))
36
(define base-neppu (map make-neppu base-normal))
37
38
(define (make-damage-list temperature base-list)
39
  (map
40
    (lambda (n)
41
      (exact (ceiling (* n (+ 1 (* (- temperature 1000) 0.0005))))))
42
    base-list))
43
44
(define (make-damage-table temperature-list base-list)
45
  (let loop ([temperature-list temperature-list]
46
             [lis '()])
47
    (if (null? temperature-list)
48
      lis
49
      (let ([current-temperature (car temperature-list)])
50
        (loop
51
          (cdr temperature-list)
52
          (cons
53
            (list
54
              current-temperature
55
              (make-damage-list current-temperature base-list))
56
            lis))))))
57
58
(define normal-table (make-damage-table temperature-list base-normal))
59
(define 2bai-table (make-damage-table temperature-list base-2bai))
60
(define 3bai-table (make-damage-table temperature-list base-3bai))
61
(define 1.2-table (make-damage-table temperature-list base-1.2))
62
(define tekagen-table (make-damage-table temperature-list base-tekagen))
63
(define midare-table (make-damage-table temperature-list base-midare))
64
(define neppu-table (make-damage-table temperature-list-neppu base-neppu))
65
66
(define (make-damage-range damage-table)
67
  (let loop ([damage-table damage-table]
68
             [table '()])
69
    (if (null? damage-table)
70
      (reverse table)
71
      (let ([current-line (car damage-table)])
72
        (let ([current-damage-list (cadr current-line)])
73
          (loop
74
            (cdr damage-table)
75
            (cons
76
              (list
77
                (car current-line)
78
                (list
79
                  (apply min current-damage-list)
80
                  (apply max current-damage-list)))
81
              table)))))))
82
83
(define normal-range (make-damage-range normal-table))
84
(define 2bai-range (make-damage-range 2bai-table))
85
(define 3bai-range (make-damage-range 3bai-table))
86
(define 1.2-range (make-damage-range 1.2-table))
87
(define tekagen-range (make-damage-range tekagen-table))
88
(define midare-range (make-damage-range midare-table))
89
(define neppu-range (make-damage-range neppu-table))
90
91
(define (display-range title range)
92
  (display title)
93
  (newline)
94
  (display "----------------------------------------\n")
95
  (let loop ([range range])
96
    (cond
97
      [(null? range)
98
       (display "----------------------------------------\n")
99
       (newline)]
100
      [else
101
        (let ([line (car range)])
102
          (display (car line))
103
          (display "℃")
104
          (display " : ")
105
          (let ([current-range-list (cadr line)])
106
            (display (car current-range-list))
107
            (display " ~ ")
108
            (display (cadr current-range-list))
109
            (newline)
110
            (loop (cdr range))))])))
111
112
(display-range "たたく、ねらい打ち" normal-range)
113
(display-range "2倍打ち、超4連打ち" 2bai-range)
114
(display-range "3倍打ち" 3bai-range)
115
(display-range "上下打ち、4連打ち、ななめ打ち" 1.2-range)
116
(display-range "てかげん打ち" tekagen-range)
117
(display-range "みだれ打ち" midare-range)
118
(display-range "熱風おろし" neppu-range)
119
```