Score an asynchronous prisoner's dilemma game
Haskell, 139 134 bytes

g=filter
(n!m)(a,b)=(a+n,b+m)
f s=init$tail$show$foldr id(0,0)$zipWith(#)(g(&gt;'a')s)$g(&lt;'E')s
'c'# 'C'=1!1
'c'#_=3!0
_# 'D'=2!2
_#_=0!3


Usage example: f "cDCddDDCcCc" ->  "9,6"

15 bytes just to get the output format right, i.e. turning a pair of numbers (x,y) into a string "x,y".

How it works:

               g(&gt;'a')s        -- extract all lowercase letters
                     g(&lt;'E')s  -- extract all uppercase letters
         zipWith(#)            -- combine both lists element wise with function #
                               -- # calls ! depending on the combination of c/d/C/D
                               -- ! takes 2 numbers a and b and returns a function
                               -- that takes a pair (x,y) and returns (x+a,y+b)
                               -- now we have a list of such functions
    foldr id(0,0)              -- apply those functions starting with (0,0)
init$tail$show                 -- format output                    


Edit: @Zgarb helped me saving 5 bytes. Thanks!